我正在加强我们的video search page以突出显示搜索结果中的搜索项。因为用户可以在文本中输入judas priest
,并且视频中有Judas Priest
,我必须使用正则表达式来保留原始文本的大小写。Preg_Replace和UTF8
我的代码工作,但我有特殊字符,如š, č and ž
的问题,看来,如果情况是相同的(尽管/ui
修改)Preg_Replace()
将只匹配。 我的代码:
$Content = Preg_Replace ('/\b(' . $term . '?)\b/iu', '<span class="HighlightTerm">$1</span>', $Content);
我也试过这样:
$Content = Mb_Eregi_Replace ('\b(' . $term . '?)\b', '<span class="HighlightTerm">\\1</span>', $Content);
但它也不起作用。如果搜索字词是“SREČA”,它将匹配“SREČA”,但是如果搜索字词是“sreča”,它将不匹配它(反之亦然)。
那么我该如何做这项工作?
更新:我设置的语言环境和内部编码:
Mb_Internal_Encoding ('UTF-8');
$loc = "UTF-8";
putenv("LANG=$loc");
$loc = setlocale(LC_ALL, $loc);
您是否考虑过如果用户在搜索查询中输入特殊字符(如'/'或'*')会发生什么? – 2010-01-14 09:30:28
搜索词在我做任何事之前都已经过消毒。感谢评论。 – 2010-01-14 09:31:42
而不是“消毒”,你可以使用'preg_quote' – troelskn 2010-01-14 10:03:56