搜索带有和不带阿拉伯语变音字符的高亮字符串

时间:2017-02-19 13:15:13

标签: php

是否有正则表达式匹配具有和不具有特殊字符的特定字符串?特殊字符不敏感,可以这么说。

与sql数据库关键字=الحمد匹配后搜索突出显示=الحمد

编辑:我想匹配具有和不带特殊/重音字符的特定字符串。不只是任何字符串/字符。

  function mbStringToArray($string)
    {
        $strlen = mb_strlen($string);
        while($strlen)
        {
            $array[] = mb_substr($string, 0, 1, "UTF-8");
            $string = mb_substr($string, 1, $strlen, "UTF-8");
            $strlen = mb_strlen($string);
        }
        return $array;
    }

    // I had to use this ugly function to remove accents as iconv didn't work properly on my test server.
    function stripAccents($stripAccents){
        return utf8_encode(strtr(utf8_decode($stripAccents),utf8_decode('ِ', 'ُ', 'ٓ', 'ٰ', 'ْ', 'ٌ', 'ٍ', 'ً', 'ّ', 'َ'),''));
    }

    $keywords= 'الحمد';

    $search = '%' . $keywords . '%';
    $stmt = $mysqli->prepare("SELECT * FROM quran WHERE $trans LIKE ?");
    $stmt->bind_param('s', $search);
    $stmt->execute();
    $stmt->store_result();  


    $clientNameNoAccent = stripAccents($clientName);

    $clientNameArray = mbStringToArray($clientName);

    foreach($clientNameArray as $pos => &$char)
    {
        $charNA =$clientNameNoAccent[$pos];
        if($char != $charNA)
        {
            $char = "(?:$char|$charNA|$charNA\p{M})";
        }
    }

    $clientSearchPattern = implode($clientNameArray); // c(?:é|e|e\p{M})ra

    if($stmt->execute()){
            $result = $stmt->get_result();
            while($row = $result->fetch_assoc()){   
            $text = 'الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ';
            $search = preg_replace('/(.*?)(' . $clientSearchPattern . ')(.*?)/iu', '$1<span class="highlight">$2</span>$3', $text);         
        echo $search;// لِلَّهِ رَبِّ الْعَالَمِينَ<span class="highlight">الْحَمْدُ</span>
        }
    }

0 个答案:

没有答案