我有一个用ajax和php制作的实时搜索脚本。 以前使用此正则表达式搜索英文字符:
$search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']);
如果搜索匹配,则突出显示该单词。
我想搜索土耳其语字符,所以我改变了正则表达式代码:
$search_string = preg_replace("/[^A-Za-z0-9ğıüşöçİĞÜŞÖÇ]/", " ", $_POST['query']);
它完美搜索,但在更改此代码后,如果土耳其代码找到,它不会突出显示,但英语确实如此。
这是高亮代码:
// Format Output Strings And Hightlight Matches
$display_name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['musteri_adi']);
$display_function = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>",$result['musteri_telefon']) ;
$display_url = urlencode($result['musteri_id']);
$display_mail = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['musteri_mail']);
$display_tcno = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['musteri_tcno']);
我想我应该更改突出显示的代码,但我不知道该怎么做
答案 0 :(得分:1)
这里有两个要点需要考虑:
应使用/u
修饰符声明正则表达式以启用完整的Unicode支持
您执行的替换会用空格替换不需要的字符,而您可以使用$search_string = preg_replace("/[^A-Za-z0-9ğıüşöçİĞÜŞÖÇ]/u", "", $keyword);
请参阅this IDEONE demo:
$keyword = 'Çınar ';
$search_string = preg_replace("/[^A-Za-z0-9ğıüşöçİĞÜŞÖÇ]/u", "", $keyword);
echo $search_string . PHP_EOL;
$musteri_adi = "Çınar, more and more words.";
$display_name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $musteri_adi);
echo $display_name . PHP_EOL;