Recherche avec accent en PHP

Ce topic a été résolu
titanium47

titanium47 Le 18 juillet 2016 à 11:45 (Édité le 25 janvier 2019 à 17:51)

Bonjour!! J'aimerais savoir comment faire pour avoir les résultat d'une recherche avec un  mot contenant les accents par exemple dans ma bdd se trouve le titre "événement majeur" et moi je tape "evenement" j'aimerais avoir le même résultat que si je tapais "événement".
Merci d'avance de m'aider
Nobodief

Nobodief Le 18 juillet 2016 à 11:50

Salut, tu peux essayer de jouer avec une fonction bien sympathique :
       public static function no_accent($str){
            $url = $str;
            $url = preg_replace('#Ç#', 'C', $url);
            $url = preg_replace('#ç#', 'c', $url);
            $url = preg_replace('#è|é|ê|ë#', 'e', $url);
            $url = preg_replace('#È|É|Ê|Ë#', 'E', $url);
            $url = preg_replace('#à|á|â|ã|ä|å#', 'a', $url);
            $url = preg_replace('#@|À|Á|Â|Ã|Ä|Å#', 'A', $url);
            $url = preg_replace('#ì|í|î|ï#', 'i', $url);
            $url = preg_replace('#Ì|Í|Î|Ï#', 'I', $url);
            $url = preg_replace('#ð|ò|ó|ô|õ|ö#', 'o', $url);
            $url = preg_replace('#Ò|Ó|Ô|Õ|Ö#', 'O', $url);
            $url = preg_replace('#ù|ú|û|ü#', 'u', $url);
            $url = preg_replace('#Ù|Ú|Û|Ü#', 'U', $url);
            $url = preg_replace('#ý|ÿ#', 'y', $url);
            $url = preg_replace('#Ý#', 'Y', $url);    
            return ($url);
      }      
   }
Cette fonction permet de convertir automatiquement les accents d'une variable, il te faudra inverser tout, mais cela peut-être utile.
titanium47

titanium47 Le 18 juillet 2016 à 11:55

:) Merci Nobodief Je viens de tester ça enleve tous les accents. Mais est ce qu'avec PDO il n'y a pas une manière de comparer ces informations avec le SQL ?
Nobodief

Nobodief Le 19 juillet 2016 à 08:00 (Édité le 19 juillet 2016 à 08:02)

Oui,

Il te suffit de faire une fonction pour déterminer la présence de ta recherche dans la base de données, tu vérifie si la valeur est supérieure à 0, si ce n'est pas le cas, tu change ta variable qui contient les mots de recherche en lui retirant ou ajoutant des accents.

       static function GetCount($where, $valeurs) {              
           global $bdd;
         $count = $bdd->prepare('SELECT * FROM recherche WHERE '.$where.' = ?');
           $count->execute(array($value));              
           $count = $count->rowCount();          
           return $count;       
        }
 Cela te permettra de chercher dans la base de données si $valeur est présent, si c'est le cas il retourne 1, sinon 0.

Ensuite dans ta requête de recherche, tu lui donne plusieurs possibilité grâce au condition, tu dit que si ta valeurs de base ne retourne rien, alors tu refait la requête avec la valeur ayant eu la conversion des accents.
Nobodief

Nobodief Le 19 juillet 2016 à 12:18

derien
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte