par
Ripat » 09 févr. 2005, 10:14
Bonjour,
La raison de ton problème est que dans ton motif, la classe de caractères
[^a-zA-Z] comprend les accentués. Dans le mot déconne la regex prendra le
é comme séparateur de mots (puisqu'il correspond à la classe négative plus haut).
Plusieurs solutions:
// avec la classe \w (tous les alpha-num) insensible à la casse
$new_msg= preg_replace("/(^|[^\w])($bannir)([^\w]|$)/", '\\1'.$blurb.'\\3', $msg);
// plus simplement avec l'assertion \b (séparateur de mots)
$new_msg= preg_replace("/\b($bannir)\b/i", $blurb, $msg);
Attention, pour que \w et \b fonctionnent correctement il faut que ton serveur utilise le jeux de caractères français. Si ça ne marche pas, ajoutes:
setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1');
Voilà, mon premier post

Bonjour,
La raison de ton problème est que dans ton motif, la classe de caractères
[color=blue][^a-zA-Z][/color] comprend les accentués. Dans le mot déconne la regex prendra le [color=blue]é[/color] comme séparateur de mots (puisqu'il correspond à la classe négative plus haut).
Plusieurs solutions:
[php]// avec la classe \w (tous les alpha-num) insensible à la casse
$new_msg= preg_replace("/(^|[^\w])($bannir)([^\w]|$)/", '\\1'.$blurb.'\\3', $msg);
// plus simplement avec l'assertion \b (séparateur de mots)
$new_msg= preg_replace("/\b($bannir)\b/i", $blurb, $msg);[/php]
Attention, pour que \w et \b fonctionnent correctement il faut que ton serveur utilise le jeux de caractères français. Si ça ne marche pas, ajoutes:
[php]setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1');[/php]
Voilà, mon premier post :wink: