PHP Rocks
optisch ähnliche Zeichen bei der mysqli-Abfrage berücksichtigen - Druckversion

+- PHP Rocks (https://www.php-rocks.de)
+-- Forum: Knowledge Base (https://www.php-rocks.de/https://www.php-rocks.de/forum/18-knowledge-base.html)
+--- Forum: Code Goodies (https://www.php-rocks.de/https://www.php-rocks.de/forum/21-code-goodies.html)
+--- Thema: optisch ähnliche Zeichen bei der mysqli-Abfrage berücksichtigen (/https://www.php-rocks.de/thema/2-optisch-aehnliche-zeichen-bei-der-mysqli-abfrage-beruecksichtigen.html)



optisch ähnliche Zeichen bei der mysqli-Abfrage berücksichtigen - kremser - 19.03.2015

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>';

?>



Intl's Spoofchecker - fireweasel - 20.03.2015

Interessant. PHP's ICU-Anbindung Intl hat für sowas (ähnliches?) die Spoofchecker-Klasse. Ich hab allerdings noch nicht ausprobiert, ob und wie es funktioniert.