在搜索中突出显示多个关键字(非英文字符)
发现此函数可以突出显示线程中搜索字符串中的关键字 突出显示搜索中的多个关键字
function highlight($text, $words) {
preg_match_all('~\w+~', $words, $m);
if(!$m)
return $text;
$re = '~\\b(' . implode('|', $m[0]) . ')\\b~i';
return preg_replace($re, '<b>$0</b>', $text);
}
但它不适用于非英语字符,我如何调整它以使用例如 å ä ö ô 等。
Found this function to highlight keywords in a search string in the thread highlight multiple keywords in search
function highlight($text, $words) {
preg_match_all('~\w+~', $words, $m);
if(!$m)
return $text;
$re = '~\\b(' . implode('|', $m[0]) . ')\\b~i';
return preg_replace($re, '<b>$0</b>', $text);
}
But it does not work for non-english characters, how can I tweak it to work with e.g. å ä ö ô etc.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你最好在页面加载所需的编码后使用 JS 来完成:
当然,你可以将
" + temp_reg + "
替换为无论你需要什么。如果您需要仅由 php 完成 - 使用通过
explode( "\s" , $words );
打破数组键的原则 - 这只会给您一个符号数组然后循环替换数组中每个单词的字符串。You better do it with JS after the page loads it with needed encoding:
Of course, you can replace the
<span class='painted'>" + temp_reg + "</span>
to whatever you need.If you need it to be done by php only - use the principle of breaking the keys to array by
explode( "\s" , $words );
- that will give you an array of symbols only and then loop to replace the string for each word in the array.您确定要搜索 unicode 字符吗? \w 仅匹配 [a-zA-Z0-9_]。
例如,这匹配波斯数字:
来源:http://php.net/manual/ en/function.preg-match.php
只需使用要匹配的字符创建一个字符类即可。
Are you sure you are searching for unicode characters? \w Only matches [a-zA-Z0-9_].
For example this matches persian digits :
Source : http://php.net/manual/en/function.preg-match.php
Just create a character class with the characters you want to match.