有一个PHP函数可以高亮显示一个单词,不管是大小写还是重音,但是返回的字符串将是只有突出显示的原始字符串?例如:
Function highlight($string, $term_to_search){
// ...
}
echo highlight("my Striñg", "string")
// Result: "my <b>Striñg</b>"
提前感谢!
我试过什么
我试着做一个函数,删除所有的重音和大写,然后用搜索词做一个"str_replace“,但是当我期望它只是普通文本但突出显示时,我发现最终结果在逻辑上没有大写或特殊字符。
发布于 2022-10-26 18:07:50
您可以使用ICU图书馆来规范字符串。然后,查找句柄字符串中的术语位置,在原始字符串中的正确位置添加HTML标记。
function highlight($string, $term_to_search, Transliterator $tlr) {
$normalizedStr = $tlr->transliterate($string);
$normalizedTerm = $tlr->transliterate($term_to_search);
$termPos = mb_strpos($normalizedStr, $normalizedTerm);
// Actually, `mb_` prefix is useless since strings are normalized
if ($termPos === false) { //term not found
return $string;
}
$termLength = mb_strlen($term_to_search);
$termEndPos = $termPos + $termLength;
return
mb_substr($string, 0, $termPos)
. '<b>'
. mb_substr($string, $termPos, $termLength)
. '</b>'
. mb_substr($string, $termEndPos);
}
$tlr = Transliterator::create('Any-Latin; Latin-ASCII; Lower();');
echo highlight('Would you like a café, Mister Kàpêk?', 'kaPÉ', $tlr);
发布于 2022-10-26 15:17:06
你可以试试str_ireplace
echo str_ireplace($term_to_search, '<b>'.$term_to_search.'</b>', $string);
https://stackoverflow.com/questions/74214376
复制相似问题