比较PHP中的波斯语字符

时间:2016-12-16 17:18:14

标签: php mysql database codeigniter

我有两个波斯语是一样的,但是它们不匹配在一起,为什么? 我该怎么做才能在php中将它们匹配在一起。(当然,这是一个例子)

DEMO: https://3v4l.org/u5sUa

    $wordd1='فريدونكنار';
    $wordm2='فریدونکنار';
    if($wordd1 == $wordm2){
        echo 'ok'; //i want this result
    }else{
        echo 'no';
    }

5 个答案:

答案 0 :(得分:2)

这些字符串看似相似,但它们不相等!

第一个字符串包含字符:

U+641  'ف'  ARABIC LETTER FEH
U+631  'ر'  ARABIC LETTER REH
U+64A  'ي'  ARABIC LETTER YEH       <- 1
U+62F  'د'  ARABIC LETTER DAL
U+648  'و'  ARABIC LETTER WAW
U+646  'ن'  ARABIC LETTER NOON
U+643  'ك'  ARABIC LETTER KAF       <- 2
U+646  'ن'  ARABIC LETTER NOON
U+627  'ا'  ARABIC LETTER ALEF
U+631  'ر'  ARABIC LETTER REH

第二个字符串包含字符:

U+641  'ف'  ARABIC LETTER FEH
U+631  'ر'  ARABIC LETTER REH
U+6CC  'ی'  ARABIC LETTER FARSI YEH <- 1
U+62F  'د'  ARABIC LETTER DAL
U+648  'و'  ARABIC LETTER WAW
U+646  'ن'  ARABIC LETTER NOON
U+6A9  'ک'  ARABIC LETTER KEHEH     <- 2
U+646  'ن'  ARABIC LETTER NOON
U+627  'ا'  ARABIC LETTER ALEF
U+631  'ر'  ARABIC LETTER REH

第三和第七个位置的字符(标记为<- 1<- 2)不一样。

答案 1 :(得分:0)

$wordd1='فريدونكنار';
$wordm2='فریدونکنار';
$result=strcmp($wordd1,$wordm2);
       if($result===0){
    echo 'ok'; 
}else{
    echo 'no';
}

strcmp()函数比较两个字符串。 strcmp()函数是二元安全的,区分大小写。这个函数返回0,两个字符串相等。

答案 2 :(得分:0)

我不知道你的语言是如何运作的,但似乎你的字符串中有相似的字符。

function illustrate_bytes($str1, $str2) {
    for( $i=0; $i<strlen($str1); $i++ ) {
        printf("%02x %08d : %02x %08d : %s\n",
            ord($str1[$i]), decbin(ord($str1[$i])),
            ord($str2[$i]), decbin(ord($str2[$i])),
            $str1[$i] === $str2[$i] ? 'same' : 'diff');
    }
}

illustrate_bytes('ﻑﺮﻳﺩﻮﻨﻜﻧﺍﺭ', 'ﻑﺭیﺩﻮﻧکﻥﺍﺭ');

输出:

d9 11011001 : d9 11011001 : same
81 10000001 : 81 10000001 : same
d8 11011000 : d8 11011000 : same
b1 10110001 : b1 10110001 : same
d9 11011001 : db 11011011 : diff
8a 10001010 : 8c 10001100 : diff
d8 11011000 : d8 11011000 : same
af 10101111 : af 10101111 : same
d9 11011001 : d9 11011001 : same
88 10001000 : 88 10001000 : same
d9 11011001 : d9 11011001 : same
86 10000110 : 86 10000110 : same
d9 11011001 : da 11011010 : diff
83 10000011 : a9 10101001 : diff
d9 11011001 : d9 11011001 : same
86 10000110 : 86 10000110 : same
d8 11011000 : d8 11011000 : same
a7 10100111 : a7 10100111 : same
d8 11011000 : d8 11011000 : same
b1 10110001 : b1 10110001 : same

所以相似之处是:

  • \xd9\x8a:“ي”和\xdb\x8c:“ی”
  • \xd9\x83:“ك”和\xda\xa9:“ک”

答案 3 :(得分:0)

波斯语中有两个字符,每个字符都有两个不同的字符值,其中第二个值来自阿拉伯字符。

首先是یي

另一个是کك

您必须将第二个出现的第一个替换为第一个。

一个示例代码是: $str = str_replace('ی','ي',$str);

答案 4 :(得分:0)

使用函数替换相似的字符,然后比较两个字符串。

function replaceSimilarChars($srting)
{

    $srting = str_replace('ي', 'ی', $srting);
    $srting = str_replace('ك', 'ک', $srting);
    // any other replacement 
    return $srting;
}