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
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。