突出显示没有重音字母的匹配关键字

时间:2015-01-30 17:05:09

标签: php regex preg-replace

我已将此代码应用于我的搜索功能。它目前工作得很好。但是,如果我输入没有重音字母的关键字,则不会突出显示该字词。

实施例:  $ text ="iphonemới"

如果我输入关键字" moi",它就不会突出显示“"mới"在$ text中。我也试过你在谷歌中作为建议的标志,但它也没有用。请帮忙......

这是我的代码:

<?php
function highlightWords($text, $words)
{
/*** loop of the array of words ***/
foreach ($words as $word)
{
        /*** quote the text for regex ***/
        $word = preg_quote($word);
        /*** highlight the words ***/
        $text = preg_replace("/($word)/ui", '<span class="highlight_word">\1</span>', $text);
}
/*** return the text ***/
return $text;
}


/*** example usage ***/
$text = 'this is my iphone mới';
/*** an array of words to highlight ***/
$words = array('moi');
/*** highlight the words ***/
$highlighttext =  highlightWords($string, $words);

?>

<html>
<head>
<title>PHPRO Highlight Search Words</title>
<style type="text/css">
.highlight_word{
background-color: pink;
}
</style>
</head>
<body>
 <?php echo $highlighttext; ?>

1 个答案:

答案 0 :(得分:0)

您可以使用此代码:

setlocale(LC_ALL, 'en_US');
$word = iconv("utf-8","ascii//TRANSLIT",$word);
/*** quote the text for regex ***/

这将删除$word中的所有变音符号。

然后,您可以遍历每个字符并将其替换为字符类(如果字符具有替代形式)。例如,o变为[ớọơờớòo]

注意:nhahtdh说得好。我不知道这些变音符号来自何种语言,更不用说任何字符应该成为具有不同变音符号的字符。

如果您想沿着该行执行某些操作,请不要展开$word并添加重音字符规则,例如:ơ变为[ờớơ]