当我搜索一个土耳其语时,它没有突出显示,但英语确实如此

时间:2015-08-05 06:29:02

标签: php regex

我有一个用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']);

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

1 个答案:

答案 0 :(得分:1)

这里有两个要点需要考虑:

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

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

  3. 完全删除它们

    请参阅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;
    
相关问题