経緯
nl2br関数を文字列に適用させる際に、''と""で囲んだ際のソースコード画面およびブラウザ画面の挙動の違いを整理したかったため。
環境
- 言語 php 7.4.29
- ブラウザ Google Chrome
- macOS Monterey 12.1 (M1チップ)
検証結果まとめ
テストケース | テスト文字列 | nl2br適用 | Webページでのソースコード表示 | ブラウザ画面 |
---|---|---|---|---|
1 | '\n' | なし | 改行なし(\nがそのまま表示) | 改行なし(\nがそのまま表示) |
2 | '\n' | あり | 改行なし(\nがそのまま表示) | 改行なし(\nがそのまま表示) |
3 | "\n" | なし | 改行あり(\nが消失) | 改行なし(\nが消失し、半角スペースが入る) |
4 | "\n" | あり | 改行あり(\nが消失し、<br />タグが出現) | 改行あり(\nが消失) |
検証コード
検証テスト1〜4
<?php
$singleQ = 'ここで\n改行です';
$doubleQ = "ここで\n改行です";
?>
<?php echo 'テスト1:' . $singleQ; ?>
<p></p> <!-- 空白行挿入のため(テスト2~4も同様) -->
<?php echo 'テスト2:' . nl2br($singleQ); ?>
<p></p>
<?php echo 'テスト3:' . $doubleQ; ?>
<p></p>
<?php echo 'テスト4:' . nl2br($doubleQ); ?>
<p></p>
余談
htmlspecialcharsを絡めた話は複雑になるので検討対象から外しました。
忘備のため、ちょっとしたことをメモとして記載しておきます。
<メモ>
htmlspecialcharsとnl2brを併用する場合は、順番に留意すること
htmlspecialchars → nl2br brタグとして認識されブラウザ画面で改行が反映
nl2br → htmlspecialchars brタグの<>がエスケープされブラウザ画面で改行が未反映