8795 sujets

Développement web côté serveur, CMS

Bonjour,
Je souhaite réaliser une recherche dans une base de donnée, qui serait insensible aux accents...
Par exemple : que l'utilisateur recherche "déjà" ou "deja", il trouve les mêmes résultats!
Voici ma requête :
$reponse = $bdd->query("SELECT ID, Name, test FROM Table WHERE Name REGEXP \'".$search."\'");

Je n'ai pas trouvé de fonction spéciale pour cela...

Merci à tous!
Modifié par Menubestof (22 Jan 2011 - 12:29)
Pour ma part, j'utilise une fonction de réécriture de la chaîne, comme ceci :


function Rewrite($chaine){
	$rewrite = strtr($chaine,"ÀÁÂÃÄÅÆÈÉÊËÇÌÍÎÏÒÓÔÕÖÙÚÛÜÝéèêëçàáâãäåùúûüìíîïôöòóõýýÿŠšÐŽžÑñØøðÞþßæƒ","AAAAAAAEEEECIIIIOOOOOUUUUYeeeecaaaaaauuuuiiiioooooyyySsDZzNnOooBbSaf");
	$rewrite = str_replace("-","",$rewrite);
	$rewrite = str_replace("_","",$rewrite);
  $rewrite = str_replace(" ","-",$rewrite);
	$rewrite = str_replace("~","",$rewrite);
	$rewrite = str_replace("²","",$rewrite);
	$rewrite = str_replace("^","",$rewrite);
	$rewrite = str_replace("°","",$rewrite);
	$rewrite = str_replace("=","",$rewrite);
	$rewrite = str_replace("+","",$rewrite);	
  $rewrite = str_replace("\"","",$rewrite);
  $rewrite = str_replace("/","",$rewrite);
	$rewrite = str_replace("?","",$rewrite);
  $rewrite = str_replace("%","",$rewrite);
  $rewrite = str_replace(",","",$rewrite);
  $rewrite = str_replace(";","",$rewrite);
  $rewrite = str_replace("!","",$rewrite);
  $rewrite = str_replace(":","",$rewrite);
  $rewrite = str_replace("'","",$rewrite);
  $rewrite = str_replace("#","",$rewrite);
  $rewrite = str_replace(".","",$rewrite);
  $rewrite = str_replace(":","",$rewrite);
  $rewrite = str_replace("(","",$rewrite);
  $rewrite = str_replace(")","",$rewrite);
  $rewrite = str_replace("@","",$rewrite);
  $rewrite = str_replace("*","",$rewrite);
  $rewrite = str_replace("]","",$rewrite);
  $rewrite = str_replace("[","",$rewrite);
  $rewrite = str_replace("{","",$rewrite);
  $rewrite = str_replace("}","",$rewrite);
  $rewrite = str_replace("--","-",$rewrite);    
	return strtolower($rewrite);
}


A toi de la personnaliser selon tes besoins. Et tu peux aussi tout mettre dans la fonction strtr().
Les str_replace() ne sont utiles que si tu souhaites remplacer d'autres caractères spéciaux que les accents.

Ensuite tu n'as plus qu'à appliquer la fonction à ta chaîne dans ta requête :


$reponse = $bdd->query("SELECT ID, Name, test FROM Table WHERE Name REGEXP \'".Rewrite($search)."\'");

Modifié par xtense (22 Jan 2011 - 16:49)