Recherche sans tenir compte des accents [Résolu]

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

Merci titi2111 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

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