PHP メッセージを改行する方法
Webアプリケーションにおいて、警告メッセージや画面上に文言を改行で出力する時にあります。その際に、前回、紹介したPHP_EOLを使って、上手く改行できない場合はあります。その時に、普通に【\r\n】を使っても上手くできませんので、少し工夫が必要です。
例1:【\r\n】を使ってもダメ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $msg = "入力エラーが発生しました。\n送信してよろしいでしょうか"; ?> <script> alert("<?php echo $msg;?>"); </script> |
上記を実行した結果は、期待したメッセージを画面に表示せずに、javascriptエラー(SyntaxError: “” string literal contains an unescaped line break)が発生したという想定外のことでしょうか。
これを画面に入れたら、よそのjavascriptに影響を与えてボタンなどの機能は動作できず、あれ、先までチャンとできたのに、どうして突然上手くできなくなっただろうと、実際に時間が掛かって結構ハマったことがよくあるかと思います。その際に、ほかのjavascriptにはエラーが発生したかを確認すれば、良いかと思います。
上記のhtmlソースの中身↓
一見すぐに見つかる(途中改行のため)バグですが、実際に結構時間が掛かって、調査したことがあります。(特にjavascriptをいっぱい使う画面)
1 2 3 4 5 6 |
alert("入力エラーが発生しました。 送信してよろしいでしょうか"); |
例2:【\r\n】の正しい使い方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $msg = "入力エラーが発生しました。\\r\\n送信してよろしいでしょうか"; ?> <script> alert("<?php echo $msg;?>"); </script> |
【\r\n】はhtmlに出力した際に、改行コードとして解釈してしまうため、エスケープ【\】したら、問題が解決します。上記の結果、改行メッセージが上手くalertしました。
また【\\n】もできますが、OS環境によって、挙動が変わりますので、【\\r\\n】が上手くできない場合、【\\n】を試してみてください。
【PHP_EOL】と【\r\n】の使い分けがお分かりになりますでしょうか。【PHP_EOL】はファイルやメール本文に文言を出力する場合は便利です。その一方で、【\r\n】や【\n】はhtmlファイルやjavascriptに文言を出力するのに強いです。