LaravelではViewの表示にBladeを使っています。
普通は{{と}}で囲んで変数を記述すれば変数の内容をブラウザ表示できますが、変数にhtmlを記述しているとエスケープされてしまうのでタグの内容まで表示されてしまいます。
example.blade.php
<?php $html_text='1行目<br />2行目'; ?>
{{$html_text}}
結果
1行目<br />2行目
{{ }}はクロスサイトスクリプティングを防ぐ効果があるので便利なのですが、変数にhtmlを入れてそれを画面表示の際に反映させたい場合は、思った結果が得られないことになります。
対応策
結果から言うと以下のように記載すればOKです。
solution.blade.php
<?php $html_text='1行目<br />2行目'; ?>
{!! e($html_text) !!}
- e()を使うことでクロスサイトスクリプティング対策を行う
- {!! !!}で囲むことで変数の中身をそのまま表示する
結果
1行目
2行目
参考