【Laravel】Formファサードって{{ }}で囲ってもエスケープされないの!?
ふとレビューしてて気づきました。
{{ Form::text('test', '') }}
んん!?昔は{!! !!}で囲まないといけなかったはず!
疑問に思ったのは{{ }}はタグをエスケープするのに、Formファサードは無視するんだなーということ。
で、検証してみました。
{{ Form::text('test', '') }}
{!! Form::text('test', '') !!}
{{ '<b>text</b>' }}
{!! '<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>') }}
{!! 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が捗りますね!)