2017-03-26 150 views
0

我需要比較兩個字符串。它們在視覺上進行比較,但var_dump結果爲其他。請幫幫我。比較兩個字符串PHP

柱(8) 「СИ.pdf」 字符串(7) 「CИ.pdf」

如何正確他相提並論?

+2

最有可能的字符串是在不同的編碼。你將不得不找出原因,以便將來可以防止這種事情發生。不_搜索一些自動編碼轉換,_不會工作。如果你想了解你所看到的,使用'hexeditor'。 – arkascha

+0

你必須['setlocale'](http://php.net/manual/en/function.setlocale.php) – Deadooshka

回答

1

使用mb_convert_encoding()將兩個版本轉換爲合理的值(例如UTF8),然後使用mb_strstr()進行比較。

+0

Thx! mb_convert_encoding($ fileName)=== mb_convert_encoding($ item-> getName())爲我工作 –

+1

這是不好的答案 – Deadooshka

+0

真的嗎?爲什麼?它適用於OP。你有更好的建議嗎? – mayersdesign

0

你的第一個字符串,"СИ.pdf",採用Cyrillic capital letter Es而第二,"CИ.pdf",有Latin capital letter C。這些是homoglyphs,並且檢查它們的一種方式是使用Spoofchecker::areConfusable(),例如,

$a = "СИ.pdf"; 
$b = "CИ.pdf"; 

var_dump(
    $a === $b, 
    (new Spoofchecker())->areConfusable($a, $b) 
); 

輸出:

bool(false) 
bool(true) 

Spoofchecker是PHP的intl extension這對ICU庫的包裝。 ICU的欺騙檢查基於Unicode Technical Report #36Unicode Technical Standard #39