Recherche sans tenir compte des accents [Résolu]

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

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.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Dernière intervention
24 juin 2008
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de titi2111
Messages postés
7
Date d'inscription
mercredi 4 juin 2008
Dernière intervention
24 juin 2008
0
Merci
Oups la dernière ligne c'est
WHERE ".enleve_accent_sql("COLONNE")." LIKE "%$mot%")";

Sans les guillemets ça marche moins bien...
Commenter la réponse de titi2111

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.