laravelで、フラッシュメッセージにHTMLタグは有効にさせたくないが、改行はしたい時のやり方
複数のメッセージを改行で区切って表示したい時のやり方。
laravelのbladeの表記について
1 2 3 4 5 |
// HTMLはそのまま出力、 <br>は<br>として表示される(エスケープ処理される) {{ }} // HTMLタグを解釈して表示、<br>は改行として表示される {!! !!} |
この2つのPHP関数を使う
1 2 3 4 5 |
// HTMLタグに使われる文字列を、HTMLエンティティ(別の文字)に置き換える関数。HTMLタグが文字列として表示されるようになる htmlspecialchars() = < (小なり) →→→ < // 改行の前に、<br>を付与 nl2br() = 改行コード→→→<br>改行コード |
bladeファイルの実装としては、こんな感じで
1 2 3 4 5 6 |
{{-- フラッシュメッセージの表示 --}} @if (Session::has('flash_message')) <div class="alert alert-success"> {!! nl2br(htmlspecialchars(Session::get('flash_message'))) !!} </div> @endif |
要するに、こういう事
1, HTMLタグをエスケープ
2, 改行だけ<br>を付与
3, HTMLタグが有効な{!! !!}で表示する