【Laravel】Formファサードって{{ }}
で囲ってもエスケープされないの!?
ふとレビューしてて気づきました。
んん!?昔は{!! !!}
で囲まないといけなかったはず!
疑問に思ったのははタグをエスケープするのに、Formファサードは無視するんだなーということ。
で、検証してみました。
{!! Form::text('test', '') !!} {!! '<b>text</b>' !!}
↓ 結果はこうなる。なぜだ。。。
<input name="test" type="text" value=""> <input name="test" type="text" value=""> <b>text</b> <b>text</b>
もしかしてvalue値をエスケープするようになった?なんて妄想してみたが違った。
{!! Form::text('test', '<b>test</b>') !!}
↓
<input name="test" type="text" value="<b>test</b>"> <input name="test" type="text" value="<b>test</b>">
で、最終的にありがたい記事が!
https://www.msng.info/archives/2016/01/laravel-blade-braces-dont-always-escape.php
Laravel 5.1 から下記のようになっていたとのこと。
function e($value) { if ($value instanceof Htmlable) { return $value->toHtml(); } return htmlentities($value, ENT_QUOTES, 'UTF-8', false); }
ということで今後Formファサードはで囲もうと思います。
({!! !!}
の出現頻度が減るのでgrepが捗りますね!)