titi2111
Messages postés7Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention24 juin 2008
-
23 juin 2008 à 16:14
titi2111
Messages postés7Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention24 juin 2008
-
24 juin 2008 à 13:39
Bonjour,
J'ai créé un catalogue php pour effectuer des recherche dans une base MySQL. Je voudrais que lorqu'on rentre un mot clef avec ou sans accents, toutes les lignes contenant ce mot avec ou sans accent ressortent.
J'ai donc trouvé une fonction php assez simple pour enlever tous les accents des mots clefs entrées:
Ce qui me pose un problème, c'est que tous les champs de ma base ont subi un "htmlentities", je cherche donc une requête MySQL me permettant d'ignorer les é
à
è
et les nombreux autres...
titi2111
Messages postés7Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention24 juin 20081 24 juin 2008 à 13:23
J'ai finalement trouvé une solution:
La fonction pour enlever les accents des mots clefs de recherche:
function enleve_accent($chaine){
$search = array ('@[ÈÉÊËèéêë]@i','@[ÀÁÂÃÄÅàáâãäå]@i','@[ÌÍÎÏìíîï]@i','@[ÙÚÛÜùúûü]@i','@[ÒÓÔÕÖØòóôõöø]@i','@[Çç]@i','@[ÿ]@i','@[Ññ]@');
$replace = array ('e','a','i','u','o','c','y','n');
return preg_replace($search, $replace, $chaine);
}
La fonction pour remplacer les &...; dans la recherche sql:
function enleve_accent_sql($chaine) {
$search=array('È','É','Ê','Ë','è','é','ê','ë','À','Á','Â','Ã','Ä','Å','à','á','â','ã','ä','å','Ì','Í','Î','Ï','ì','í','î','ï','Ù','Ú','Û','Ü','ù','ú','û','ü','Ò','Ó','Ô','Õ','Ö','ò','ó','ô','õ','ö','Ç','ç','ÿ');
$replace=array('e','e','e','e','e','e','e','e','a','a','a','a','a','a','a','a','a','a','a','a','i','i','i','i','i','i','i','i','u','u','u','u','u','u','u','u','o','o','o','o','o','o','o','o','o','o','c','c','y');
for ($i=0;$i<$c=count($search);$i++) {
$chaine = "REPLACE(($chaine),'".htmlentities($search[$i],ENT_QUOTES)."','$replace[$i]')";
}
return $chaine;
}
$mot = enleve_accent($_POST["mot"]);
Recherche du mot dans la base:
$query = "SELECT * FROM fiches_ouvrages
WHERE ".enleve_accent_sql(COLONNE)." LIKE "%$mot%")";
C'est pas tres élégant mais ça fonctionne...
Avertissez moi si vous connaissez une autre méthode.