プロが教える店舗&オフィスのセキュリティ対策術

PHPのエスケープシーケンスについての質問です。
下記のコードで改行コードを<br>に置換し、結果を画面に出力しました。

$text = "あいうえお\\nかきくけこ\nさしすせそ";
$text = str_replace("\n", "<br>" , $text);
echo $text;

実行結果は下記になりました。
あいうえお\\nかきくけこ
さしすせそ

私の予想では、\\nが\<br>に置換され、下記になるかと思いました。
あいうえお\
かきくけこ
さしすせそ

なぜ\\nは\<br>に置換されず、そのままだったのでしょうか?

A 回答 (1件)

これ実行結果は


あいうえお\nかきくけこ
さしすせそ
になりませんでしたか?

\\nですと1個目の\が2個目の\をエスケープしており、2個目の\はエスケープされる側ですのでnに対しては何も影響を与えないです。

例えば\をエスケープするとAという文字に相当、nをエスケープするとBという文字に相当するとします。
すると1行目で$textに設定されるのは"あいうえおAnかきくけこBさしすせそ"となります。
2行目での処理は"B"を<br>に書き換えろ、なので当然Anは変換の対象外です。
最終的に出力されるのは"あいうえおAnかきくけこ<br>さしすせそ"となります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
疑問が解けました。

お礼日時:2010/05/27 11:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!