J'ai essayé de mettre en gras un terme de recherche dans une phrase. Si la phrase est Engliš is spoken wörldwide.
Si mon terme de recherche est spoken world
Je veux obtenir Engliš is <b>spoken wörld</b>wide.
J'ai utilisé cette fonction :
function highlightWords($text, $searchTerm){
$corr = ['a' => '[aäâ]', 'o' => '[oöòóôõ]', 'c' => '[cç]', 's' => '[ssšss]', 'y' => '[ýÿyyy]', 'o' => '[ôöòóøooõ]', 'n' => '[ñnnn]', 'u' => '[üu]'];
$key = preg_quote($searchTerm);
$pattern = '/' . strtr($key, $corr) . '/iu';
$text = preg_replace($pattern, '<b>$0</b>', $text);
return $text;
}
C'est censé fonctionner, mais j'obtiens un comportement vraiment étrange. Voici quelques exemples :
Le texte est Sygmaý çykdy desdi-sähra düzünden
(désolé pour cette phrase bizarre). Quand $searchTerm
es duz
cela fonctionne parfaitement, j'obtiens Sygmaý çykdy desdi-sähra <b>düz</b>ünden
. Si je change le terme de recherche en sahra
la fonction renvoie un simple Sygmaý çykdy desdi-sähra düzünden
.
Fonctionne avec cykdy
y çykdy
.
Mais ne fonctionne pas avec les deux sygmay
ni sygmaý
. Mais cela fonctionne avec Sygmaý
avec une majuscule.
Que dois-je corriger pour que le terme de recherche soit mis en évidence dans tous les scénarios ?