19.03.2015, 13:25
Diese Funktion hab ich vor einiger Zeit geschrieben, als ich nach einer Möglichkeit suchte, optisch ähnliche Zeichen bei der Datenbankabfrage zu berücksichtigen. Sie ist insbesondere bei der Abfrage von händisch erfassten Seriennummern von Geräten oÄ hilfreich. Die Funktion generiert einen Regex der mittels RLIKE bei der mysqli-Abfrage eingebaut wird. Sie kann auch leicht ausgebaut werden durch Änderung des Arrays in conf_chars().
PHP-Code:
<?php
function mkreg_confusing_chars($search){
if(!function_exists('conf_chars')){
function conf_chars(){
// similar-looking characters
return array('0QOo', '1Il', '2Z', '5S', '6G');
}
}
if(preg_match('/['.implode(conf_chars()).']/', $search)){
if(!function_exists('replace_conf_chars')){
function replace_conf_chars($matches){
return '['.implode(preg_grep('/'.$matches[0].'/', conf_chars())).']';
}
}
return preg_replace_callback('/['.implode(conf_chars()).']/', 'replace_conf_chars', $search);
}else{
return $search;
}
}
// vvv only for testing purposes vvv
echo '$search<br>';
echo '<b>'.$search.'</b><br>';
echo 'mkreg_confusing_chars($search)<br>';
echo '<b>'.mkreg_confusing_chars($search).'</b>';
?>