Recherche sans tenir compte des accents [Résolu]

Signaler
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juin 2008
-
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juin 2008
-
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:

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);
 }

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...

Merci pour votre aide.

2 réponses

Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juin 2008

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.
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
24 juin 2008

Oups la dernière ligne c'est
WHERE ".enleve_accent_sql("COLONNE")." LIKE "%$mot%")";

Sans les guillemets ça marche moins bien...