Bonjour,
Le contexte :
Dans un back-office, je souhaite mettre un systeme de tags d'image.
J'ai donc un <input text> dans lequel je souhaite mettre un systeme d'auto-complétion.
Je vous epargne le JS et les requetes BDD pour se concentrer sur le problème.
J'ai donc une liste de suggestion, dans laquelle le motif reconnu se met en gras.
Je veux que se motif soit tolérant vis-a-vis des accents et ignore la casse.
J'ai réussi à en venir à bout, mais je ne pense pas m'y être pris de la bonne façon...
Quelques incompréhensions me frustrent...
Voici le code :
Code :
function cleanAccent($texte) { $aremplacer = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ'; $enremplacement = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyrr'; return $texte; } function boldingMotif($texte, $motif) { $texteClean = strtolower($texte); // On stock le texte en minuscule $texteClean = cleanAccent($texteClean); // On remplace les caractere speciaux $pos = strpos($texteClean, $motif); // position du motif trouvé $long = strlen($motif); // Longueur du motif // On a donc la position et la longueur... on a plus qu'à reprendre notre var originale // pour entourer le motif (dans son contexte original) de balises <strong>... // On renvoie la sauce... } // on test un exemple : $name = "GÉRard"; $motif = "er"; echo 'titre original : '. $name. '<br />'; echo 'motif cherché : '. $motif. '<br />'; echo 'Resultat : '.boldingMotif ($name, $motif);
|
Le tout retourne bien "GÉRard // GeRard // GÉRard " 
1/ Je ne comprend pas pourquoi je suis obligé de mettre des utf8_decode/encode...
sans ça, ça ne marche pas... la fonction cleanAccent() a été largement inspiré d'une source.
Mon fichier, mon header() ainsi que le charset HTML sont en UTF-8, pourquoi devoir décoder pour comparer ?
2/ Je n'ai pas trouver de regex pour faciliter la tache de boldingMotif()...
En existe t-il une qui permettrait d'en arriver au même résultat ? (c'est la "tolérance" des accent qui me pose problème, ainsi que laisser la suggestion dans son contexte original...)
Message édité par abais le 27-07-2010 à 10:28:57
---------------
Le membre ci-contre n'est pas responsable du message ci-dessus.