Bonjour,
J’écris un script PHP qui met des mots en surbrillance dans des chaînes de caractère.
Je cherche à mettre le mot entier en surbrillance, pas une partie de mot, en utilisant \b.
Ça fonctionne bien quand il n’y a pas de caractères accentués.
Par exemple :
$str1="Je ne bois pas de café car la caféine m'empêche de dormir. Je préfère une autre boisson.";
$str2=preg_replace('/\bbois\b/','<span style="background-color:yellow;">$0</span>',$str1);
echo '<p>'.$str2.'</p>';
Le mot bois est bien mis en surbrillance quand il est seul, mais pas à l’intérieur de boisson.
Tout se gâte avec un caractère accentué en fin de mot :
$str3=preg_replace('/\bcafé\b/','<span style="background-color:yellow;">$0</span>',$str1);
echo '<p>'.$str3.'</p>';
Là, café est mis en surbrillance dans caféine, mais pas quand il est tout seul.
(J’imagine que le problème se pose aussi quand le caractère accentué est en début de mot.)
Comment résoudre ce problème ?