2017-03-26 6 views
0

私は2つの文字列を比較する必要があります。視覚的に比較しますが、var_dumpの結果はotherです。お願い助けて。彼を比較する方法正しい2つの文字列を比較する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を使用しています。これらは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に基づいています。

関連する問題