• 締切済み

PHPの文字列の比較について

PHPの文字列の比較について質問です。 $hoge = "文字列¥¥テスト"; $foo = "文字列¥テスト"; とあった場合 var_dump($hoge == $foo); とすると trueがかえってきます。 バイト列としてみた場合 エスケープしたバックスラッシュと 構文上、エスケープの必要のないバックスラッシュの文字列上の 比較ですがこれが、なぜかtrueがかえってきます。 これは、当然の結果なのでしょうか? PHPは文字列を比較するさい、バイト列としての文字列のならびより アウトプットされる結果を比較しているということでしょうか? それとも、単純に上記変数$hogeと$fooはバスックスラッシュの使用方法は 関係なく同一のものとして扱われるのでしょうか?

みんなの回答

回答No.1

PHP 5.4.17でちょっと実行してみましたが、 var_dump($hoge); var_dump($foo); したら、 string(13) "文字列\テスト" string(13) "文字列\テスト" とでたりしませんか? そうすると、比較演算の違いではなくて代入の時に、何もエスケープしていないバックスラッシュはバックスラッシュという文字があったとして処理しているのではないかと予想します。 というわけで、ドキュメントを見てみたら、こんなこと書いてありますね。 http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double > 繰り返しますが、この他の文字をエスケープしようとした場合には、 バックスラッシュも出力されます!