Hallo,
ich habe jetzt einige Stunden gegrübelt, wie man bei einer Datenbankabfrage (MYSQLi) optisch ähnliche Zeichen berücksichtigen kann. Ich weiß nicht, ob dieses Problem anders gelöst werden kann, aber ich habe eine Lösung für dieses Problem gefunden.
Bei meiner Recherche bin ich draufgekommen: Es gibt für die Suche in MYSQL nicht nur "=" und "LIKE" sondern auch "RLIKE". Mit "RLIKE" kann man beim SELECT-Query einen regulären Ausdruck einzubauen.
Jetzt blieb nur noch die Frage offen, wie ich den regulären Ausdruck zusammenbauen kann.
Das habe ich so gelöst:
Jetzt muss man $rsearch nur noch in Verbindung mit RLIKE anwenden.
Ich hoffe, dass ich jemandem damit helfen kann
Kritik ist wie immer erwünscht!
ich habe jetzt einige Stunden gegrübelt, wie man bei einer Datenbankabfrage (MYSQLi) optisch ähnliche Zeichen berücksichtigen kann. Ich weiß nicht, ob dieses Problem anders gelöst werden kann, aber ich habe eine Lösung für dieses Problem gefunden.
Beispiel:
Die Seriennummer eines Gegenstandes lautet "LOb123". Person X liest die Nummer irrtümlich als "L0bl23" ("Null" satt Buchstabe "O", kleines "l" statt "1") und trägt sie falsch in die Datenbank ein. Person Y sucht nach der richtigen Nummer "LOb123" und findet die von Person X falsch eingetragene Seriennummer "L0bl23" logischerweise nicht.
zur Verdeutlichung des Problems mit dem falsch Ablesen:
LOb123 - L0bl23
LOb123 - L0bl23 (Font: Courier New)
Die Seriennummer eines Gegenstandes lautet "LOb123". Person X liest die Nummer irrtümlich als "L0bl23" ("Null" satt Buchstabe "O", kleines "l" statt "1") und trägt sie falsch in die Datenbank ein. Person Y sucht nach der richtigen Nummer "LOb123" und findet die von Person X falsch eingetragene Seriennummer "L0bl23" logischerweise nicht.
zur Verdeutlichung des Problems mit dem falsch Ablesen:
LOb123 - L0bl23
LOb123 - L0bl23 (Font: Courier New)
Jetzt blieb nur noch die Frage offen, wie ich den regulären Ausdruck zusammenbauen kann.
Das habe ich so gelöst:
PHP-Code:
<?php
$search = '1 Orangutan und 6 Igel sind ein Segen, 6 Orangutan und 1 Igel sind eine Qual';
function conf_chars(){
return array('0QOo', '1Il', '2Z', '5S', '6G');
}
function split_chars($chars){
return implode('|', str_split(implode($chars)));
}
if(preg_match('/('.split_chars(conf_chars()).')/', $search)){
function replace_conf_chars($matches){
return '('.split_chars(preg_grep('/'.$matches[0].'/', conf_chars())).')';
}
$rsearch = preg_replace_callback('/('.split_chars(conf_chars()).')/', 'replace_conf_chars', $search);
}else{
$rsearch = $search;
}
echo $rsearch;
?>
(1|I|l) (0|Q|O|o)rangutan und (6|G) (1|I|l)ge(1|I|l) sind ein (5|S)egen, (6|G) (0|Q|O|o)rangutan und (1|I|l) (1|I|l)ge(1|I|l) sind eine (0|Q|O|o)ua(1|I|l)
Ich hoffe, dass ich jemandem damit helfen kann

Kritik ist wie immer erwünscht!

Kommentar