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。