Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour, dans un script PHP, je veux remplacer des mots par des liens vers les fiches de ces mots. Tout est ok, tout fonctionne sauf un petit bug sur les mots accentués.
En simplifiant le tout, voilà un exemple :
$texte = 'martin martine martinez gagné gagnée gagnées pétard pétarde'; $texte = preg_replace('#\bmartin\b#', 'ok1', $texte); $texte = preg_replace('#\bgagné\b#', 'ok2', $texte); $texte = preg_replace('#\bgagnée\b#', 'ok3', $texte); $texte = preg_replace('#\bpétard\b#', 'ok4', $texte); //Affiche : ok1 martine martinez gagné ok2e ok2es ok4 pétarde echo $texte;
En gros, je veux que :
- "martin" (et pas "martine" et "martinez") soit remplacé par "ok1"
- "gagné" (et pas "gagnée" et "gagnées" soit remplacé par "ok2"
- "gagnée" soit remplacé par "ok3"
- "pétard" (et pas "pétarde") soit remplacé par "ok4"
Le code ci-dessus me semble bon. Les \b \b permettent d'éviter justement que martine et martinez soit changés en ok1.
Pour "martin" et "pétard", tout se passe comme je peux.
Mais pour "gagné", ça déconne. Le mot qui devrait être pris en compte ne l'est pas. Pire, les mots qui ne devraient pas être pris en compte (grâce au \b \b), le sont !
Quelqu'un a une idée, une piste ? Merci d'avance.
Hors ligne
Il me semble que ça ne marchait pas dans toutes les situations, mais si ça résoud ton problème tant mieux : http://fr3.php.net/manual/fr/function.p … .php#89471
Hors ligne
Au pif : t'as essayé en rajoutant le modificateur /u dans ton expression ? C'est dans les cas utf-8..
Hors ligne
le modificateur 'u' se place comme dans l'exemple que tu viens de lire sur php.net, à savoir après le second délimiteur (toi tu utilises le caractère # en guise de délimiteur, comme d'autres utilisent /, @, ...).
Hors ligne