当我搜索一个土耳其词时,它没有高亮显示,但英语有


When i do search a turkish word,it doesn't highlighted but english it does

我有一个用ajax和php制作的实时搜索脚本。它用于使用以下regex搜索英文字符:

$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']);

我想我应该改变突出显示的代码,但我不知道怎么做

这里有两点需要考虑:

  1. 正则表达式应该用/u修饰符声明,以启用完整的Unicode支持

  2. 您执行的替换用空格替换不需要的字符,而您可以使用$search_string = preg_replace("/[^A-Za-z0-9ğıüşöçİĞÜŞÖÇ]/u", "", $keyword);

  3. 完全删除它们

查看这个IDEONE演示:

$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;