Bonjour,
Je viens de réaliser que je possédais un gros problème sur une partie de mon site qui utilisait des expressions régulières complexes.
Je possède à certains endroits du site un code de ce type (il s'agit d'un exemple, il n'est normalement pas du tout comme ça) :
Ce preg replace fonctionne normalement très bien dans tous les cas, excepté quand le mot à remplacer (étaux en l'occurrence) commence ou termine par un caractère accentué. Normalement, la fonction devrait remplacer toutes les occurences de "étaux" par "<b>remplacement</b>" dans $contenu. Il ne le fait cependant pas, mais cela fonctionne quand je remplace "étaux" par des mots du type "phare" ou "tête" (donc pas d'accent, ou uniquement à l'intérieur).
Après de longues recherche, je me suis aperçu que le problème provenait de \b, word boundary : il considère en effet les caractères accentués comme des caractères non-alphanumériques, au même titre que les points, les espaces, etc.
Après recherche, je me suis aperçu que je n'étais pas le seul dans ce cas mais que presque personne n'avait l'air d'être vraiment dérangé par ce comportement (ou plutôt ce bug), à part ici : http://www.infowebmaster.fr/forum/autres-langages/expressions-regulier ... cents-292/
La proposition faite dans le topic cité ne me convient pas vraiment car n'est pas très pratique d'implémentation, pas très propre et risque de ralentir mes scripts car il s'agit de dizaines de milliers de remplacements à faire.
Je souhaitais donc me renseigner sur ce problème, savoir si vous connaissiez une issue ou un autre moyen.
Merci d'avance,
7804j
Je viens de réaliser que je possédais un gros problème sur une partie de mon site qui utilisait des expressions régulières complexes.
Je possède à certains endroits du site un code de ce type (il s'agit d'un exemple, il n'est normalement pas du tout comme ça) :
Code:
preg_replace("#(\b|>)". preg_quote("étaux", "#")."(?![^<]*>)\b#i", '$1<b>remplacement</b>', $contenu)
Ce preg replace fonctionne normalement très bien dans tous les cas, excepté quand le mot à remplacer (étaux en l'occurrence) commence ou termine par un caractère accentué. Normalement, la fonction devrait remplacer toutes les occurences de "étaux" par "<b>remplacement</b>" dans $contenu. Il ne le fait cependant pas, mais cela fonctionne quand je remplace "étaux" par des mots du type "phare" ou "tête" (donc pas d'accent, ou uniquement à l'intérieur).
Après de longues recherche, je me suis aperçu que le problème provenait de \b, word boundary : il considère en effet les caractères accentués comme des caractères non-alphanumériques, au même titre que les points, les espaces, etc.
Après recherche, je me suis aperçu que je n'étais pas le seul dans ce cas mais que presque personne n'avait l'air d'être vraiment dérangé par ce comportement (ou plutôt ce bug), à part ici : http://www.infowebmaster.fr/forum/autres-langages/expressions-regulier ... cents-292/
La proposition faite dans le topic cité ne me convient pas vraiment car n'est pas très pratique d'implémentation, pas très propre et risque de ralentir mes scripts car il s'agit de dizaines de milliers de remplacements à faire.
Je souhaitais donc me renseigner sur ce problème, savoir si vous connaissiez une issue ou un autre moyen.
Merci d'avance,
7804j