2016-07-17 12 views
1

2つの異なる特殊文字を比較しようとしていますが、それらを比較すると同じです。2つの異なる特殊文字が同じです

$char1= ""; 
$char2= ""; 

echo mb_detect_encoding($char1, 'UTF-8', true); // 'UTF-8' 
echo mb_detect_encoding($char2, 'UTF-8', true); // 'UTF-8' 

if($char1 == $char2) // TRUE 
echo strcmp($char1, $char2); // 0 

のApache/2.4.10

PHP/5.6.3

PhpStorm 9.0.2

私は有効な比較をするために何ができますか?

ありがとうございます。

+0

これらの特殊文字は何ですか? –

+0

@Anant、ローカルに貼り付けてコピーします。 Windowsのスタートメニュー(検索ボックス)、それを読むことができます。 – Borna

+0

'var_dump($ char1 == $ char2)'はあなたの2文字で 'FALSE'を返します。あなたの結果を確認できますか?多分あなたはあなたの比較を行うために 'strcmp'を試すことができます。文字列が等しい場合は '0 'を返します。 – BeetleJuice

答えて

2

有効な比較を行うにはどうすればよいですか?

おそらく、我々はこれで間違った方法を探しているソリューション

を更新しました。この問題はPHPとは関係なく、コードエディタに関するものです。おそらくエディタは入力時に両方の文字を同じものとして登録しているので、PHPに違いはありません。ここで何ができるかです:

  1. 保存文字を認識し、エディタを使用して自身でファイル内の各文字、などWordpad
  2. ロード今、私たちは「という$char=file_get_contents('path/to/char.txt')
  3. とPHPの文字コードエディタを完全にバイパスして、2つを比較します。彼らが違うなら、あなたの編集者は責任を負うべきかもしれません。

オリジナルソリューション

あなたは

$ordUTF8 = function($char){ 
    list(, $ord) = unpack('N', mb_convert_encoding($char, 'UCS-4BE', 'UTF-8')); 
    return $ord; 
}; 
$char1= ""; 
$char2= ""; 
// 61656 and 61558 in my testing 
$isEqual = $ordUTF8($char1)===$ordUTF8($char2); 

Live demo文字の代わりに彼らのASCII値にあなたの文字を変換しようと値を比較することができます。このソリューションは、次のようなヒントを得ました。this accepted answer

+0

trueを返します:... – Borna

+1

間違った角度から見ているかもしれませんが、おそらくコードエディタと関係がありますか?ワードパッドのようなエディタを使って各文字を独自のテキストファイルとして保存するとどうなりますか? PHPで、 '$ char = file_get_contents( 'path/to/file.txt')'を使用して文字を取得しますか? – BeetleJuice

+0

私はそのいくつかのApache設定問題を考えています...私はデフォルトの文字セットを設定しようとしましたが、別のファイルから読み込もうとしましたが、まだ間違っています:/ – Borna

関連する問題