Laravel textarea 改行反映


はじめに

投稿するテキストエリア内で改行したのに表示される画面だと改行が反映されてない。
割と簡単にできたのメモ。
Laravelのbladeテンプレート使います

Article.blade.php
<p>{{$post->body}}</p>

Laravelの二重中括弧は、htmlspecialchars()関数を通した表示になっています。
XSS対策を初めからやってくれてるんですね。

つまり{{$post->body}} = echo htmlspecialchars($post->body)てことです。
これを踏まえて、改行を表示していく。

PHPの nl2br()関数

この関数を使えば 改行がある位置に改行を示すHTMLタグを挿入することができる。
なので
nl2br(htmlspecialchars($post->body))
これでいける!と思いきやこれだとうまくいきません。
二重括弧に入れているのでエスケープ処理が実施されてしまって
ただの文字列として表示されちゃう。

bladeテンプレートエンジンでは、エスケープ処理をしないデータ表示の構文がある。
{!! !!}
これで囲んじゃえばいいだけです!

まとめ

以上から
{!! nl2br(htmlspecialchars($post->body)) !!}
これOk。