2016-12-16 62 views
2

我有兩個波斯語單詞是一樣的,但它們不匹配在一起,爲什麼? 我該怎麼做在PHP搭配在一起它們(當然,這是一個例子)比較PHP中的波斯語字符

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

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

回答

-2

不能刪除此,但將其標記爲錯誤回答! ! (閱讀評論) 試試這樣說:

mb_internal_encoding("UTF-8"); 
$wordd1=utf8_decode('فريدونكنار'); 
$wordm2=utf8_decode('فریدونکنار'); 
if($wordd1===$wordm2){ 
     echo 'ok'; 
}else{ 
     echo 'no'; 
} 

這個版本的作品。

strcmp是長的路要走,但它不是句話之後B安全,因爲:

返回< 0如果str1小於str2的;如果str1大於 str2,則爲0;如果相等,則爲0。

所以我改變了我的答案。

+0

如何在MySQL的類似查詢中使用它? –

+0

多數民衆贊成在你的問題有點偏離,可以說。我必須自己開發並測試它,以便從中進行「LIKE」查詢,並且還取決於數據庫連接的設置方式。 Sry基因。 – JustOnUnderMillions

+0

我使用codeigniter.Its默認設置:http://www.codeigniter.com/userguide2/database/active_record.html –

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

strcmp()函數比較兩個字符串。 strcmp()函數是二進制安全的並區分大小寫。這個函數返回0,這兩個字符串是相等的。

+0

你測試了嗎? – JustOnUnderMillions

+0

在這裏看到更多.... http://www.w3schools.com/php/showphp.asp?文件名= demo_func_string_strcmp –

+0

你在測試這個值在這裏的帖子?如果不這樣做http://sandbox.onlinephpfunctions.com/ – JustOnUnderMillions

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 :「ک」
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)的字符不相同。

+0

哦你是怎麼產生這個的? – Sammitch

+1

@Sammitch使用Perl腳本我寫了一段時間來回答這樣的問題:https:///gist.github.com/duskwuff/f7e15545df91d5608b14ed94cbb747eb – duskwuff

+0

Ahh整潔,我嗅探過,'intl'具有PHP7的這個功能:http://php.net/manual/en/intlchar.charname.php – Sammitch

1

波斯語中有兩個字符,每個字符都有兩個不同的字符值,其中第二個值來自阿拉伯字符。

首先是یي。另一個是کك

你必須用第一個替換所有的第二個。

一個示例代碼: $str = str_replace('ی','ي',$str);

0

使用功能,可替代同類找字,則比較兩個字符串。

function replaceSimilarChars($srting) 
{ 

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