Laravel5(Blade)のViewで改行させたいだけなのに少し悩んだ

laravel laravel

Laravel5、と言うかBladeを使用したページで改行コードが入った文字列を表示させようとして少し悩んだのメモ。
PHPに不慣れだったりLaravelの情報を調べると4と5が混在していて探しにくいとか言い訳してみる。

環境

Mac OS X El Capitan 10.11.4
Laravel Framework version 5.2.39

素直に改行させてみる

こんなのFrameworkとか関係なくPHPとHTMLの世界の話でしょ?
PHPにnl2brって便利な関数あるみたいだし楽勝じゃん!
と舐めきって書いたのが以下のコード。

controller.php
$str = "文字列\n文字列";
return view('view')->with('str',nl2br($str, false));

view.blade.php
{{ $str }}

出力結果
文字列<br> 文字列

うん、nl2br関数は効いてるけど上手にエスケープされてるね。
セキュアで素敵だね。でも今は素直に表示して頂きたい。

と言うか三重の波括弧{{{ $str }}}だとエスケープされるけど
二重の波括弧{{ $str }}ならエスケープされないんじゃないの?
と思ったらそれはLaravel4まででLaravel5ではどちらもエスケープされるとの事。

Laravel5でエスケープされないように修正。
view.blade.php
{!! $str !!}

出力結果
文字列
文字列

そう、これが見たかった。

ちなみにPHPのコード上で
$str = '文字列\n文字列';
と文字列をシングルクォートにすると\nが文字列として扱われるのでnl2brすら効かずにそのまま出力される。
細かい、細かいよPHP。