PHP シングルクォーテーションとダブルクォーテーションの違いにハマる
悔しいので備忘としてメモ。
以下のような文字列の改行をhtmlの<br>
に変換したくnl2br()
を使用したものの、
もともとあった改行が削除されない。
<?php // <textarea>などで入力されたテキストとお考えください $text = <<<EOL あいうえお かきくけこ EOL; var_dump(nl2br($text, false));
出力
string(35) "あいうえお<br> かきくけこ"
これではhtmlとして表示された際に余分なスペースが空いてしまうことになる。
そのためstr_replace()
を使用して改行を削除しようとしたのだが…
<?php $text = <<<EOL あいうえお かきくけこ EOL; $newText = nl2br($text, false); $newText = str_replace(['\r\n', '\r', '\n'], '', $newText); var_dump($newText);
出力
string(35) "あいうえお<br> かきくけこ"
結果が何も変わらず、依然として改行文字が残り続けている状態。 結果として、改行文字をくくるのにシングルクォーテーションを使っていることが原因だった。
// \nの場合 シングル -> 単なる \n という文字列として扱う ダブル -> 改行文字として扱う
php.netにも記載がある。
文字列を指定する最も簡単な方法は、引用符 (文字 ') で括ることです。(中略) \r や \n といったおなじみのエスケープシーケンスを書いても特別な効果は得られず、 書いたままの形式で出力されます。
シングルクォーテーションをダブルクォーテーションに変更して試してみる。
<?php $text = <<<EOL あいうえお かきくけこ EOL; $newText = nl2br($text, false); - $newText = str_replace(['\r\n', '\r', '\n'], '', $newText); + $newText = str_replace(["\r\n", "\r", "\n"], '', $newText); var_dump($newText);
出力
string(34) "あいうえお<br>かきくけこ"
無事、改行文字を削除することができた。
シングルクォーテーションとダブルクォーテーションの違いは変数展開ができる・できないくらいの認識だったので勉強になった。
でも少ないとはいえ時間を溶かしてしまったので悔しい。
【参考】