Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1780 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème RegEx et accent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème RegEx et accent

n°2237731
mechkurt
Posté le 11-09-2014 à 12:07:38  profilanswer
 

Bonjour,
Je fais un moteur de recherche de en autocomplete qui cherche dans plusieurs champs dans ma base.
Pas de problème au niveau de ma requête, mon MATCH AGAINST (nom, prenom) AGAINST ('+Stephane*') me renvoie bien les lignes qui ont Stephane et ou Stéphane
Par contre en php je fais des regex pour mes résultats pour savoir dans quel colonne se trouve mon résultat positif.

Code :
  1. while($row = mysql_fetch_row($res)) {
  2. $result = preg_match('#('.$word.'[a-z0-9-]*)#ui', $row[0], $matches);
  3. foreach($matches as $word) {
  4.  $word = mb_strtolower($word, "UTF-8" );
  5.  $t_find_p[$word] = 1;
  6. }
  7. $result = preg_match('#('.$word.'[a-z0-9-]*)#ui', $row[1], $matches);
  8. foreach($matches as $word) {
  9.  $word = mb_strtolower($word, "UTF-8" );
  10.  $t_find_n[$word] = 1;
  11. }
  12. }


Le but de la manœuvre étant aussi d'afficher le mot complet, le mec rentre "ste" je lui affiche "prenom : Stéphane"
 
Ça marche si le mec rentre sa recherche avec accent car ma regex sera bonne, par contre si on rentre sans accent, ma regex ne match pas...
 
Auriez vous une solution (PHP ou SQL) à mon problème ?


---------------
D3
mood
Publicité
Posté le 11-09-2014 à 12:07:38  profilanswer
 

n°2237741
mechkurt
Posté le 11-09-2014 à 14:23:45  profilanswer
 

Personne ?
 
J'ai pensé a passer mon $word, $row[0] et $row[1] a un str_replace pour remplacer tous les caractères accentué par leur équivalent non accentué mais du coups je renverrais un résultat "faux" à mon autocomplete...
 
Y'a pas un flag spécifique ou une astuce autre propre au regex pour les rendre accent-insensitive ?


---------------
D3
n°2237779
yellu
Posté le 11-09-2014 à 16:17:16  profilanswer
 

Salut,
 
Pour tes accents, pas à ma connaissance...
 
En revanche tu dois échapper ta variable.
Quand on concatène une chaîne dans une regexp on s'expose au risque que le caractère de délimitation de regexp (ici la dièse # ) soit présent dans la chaîne concaténée.
 
Donc :
 

Code :
  1. preg_match('#('.$word.'[a-z0-9-]*)#ui', $row[0], $matches);


 
Deviendrait :
 

Code :
  1. preg_match('#('.preg_quote($word, '#').'[a-z0-9-]*)#ui', $row[0], $matches);

n°2237792
mechkurt
Posté le 11-09-2014 à 16:58:23  profilanswer
 

Merci, je n'y avais pas pensé...
 
...peu de chance qu'un utilisateur rentre un # mais quand même. ^^
 
Du coups pour mon problème j'ai fait une manip de conversion sans accent :

Code :
  1. $match = iconv("UTF-8", 'ASCII//TRANSLIT//IGNORE', $row[1]);


Ça fonctionne mais c'est un peu dommage d'avoir mon retour en autocomplete sans les accents. :-/


---------------
D3

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème RegEx et accent

 

Sujets relatifs
Problème basique HTML / CSSProbleme menu onglet
problème de formulaire mailproblème de compilation
problème de mise à jour de la BD[résolu]Problème authentification mail
Problème de signauxProblème d'architecture de software
Problème Macro excel 2007Probleme de 0x00
Plus de sujets relatifs à : Problème RegEx et accent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR