【发布时间】:2011-01-05 00:18:07
【问题描述】:
我正在增强我们的 video search page 以突出显示结果中的搜索词。因为用户可以输入judas priest,并且视频的文本中有Judas Priest,所以我必须使用正则表达式来保留原始文本的大小写。
我的代码有效,但我遇到了š, č and ž 等特殊字符的问题,似乎Preg_Replace() 只有在大小写相同的情况下才会匹配(尽管有/ui 修饰符)。
我的代码:
$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);
【问题讨论】:
-
您是否考虑过如果用户在搜索查询中输入特殊字符(例如
/或*)会发生什么? -
搜索词在我对它做任何事情之前都会被清理。不过感谢您的评论。
-
您可以使用
preg_quote代替“消毒”