我正在加強我們的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