Laravelの{{ }}はhtmlspecialcharsではなくhtmlentitiesだった
勘違いしてました。
LaravelのBladeのってhtmlentitiesだったんですね。
HTMLのサニタイズはhtmlspecialcharsで十分なので、もそうだろうと思い込んでました。
htmlspecialcharsとhtmlentitiesはどう違うの?
htmlspecialcharsがHTMLにおける特殊文字をHTMLエンティティに変換するのに対して、
htmlentitiesは適用可能な文字を全て HTML エンティティに変換します。
PHP: htmlspecialchars - Manual
PHP: htmlentities - Manual
なので、¥
とか©
とか×
とか÷
とか、
普段よく使う記号も変換するので、意図せず使っている方は注意!
print htmlspecialchars('¥'); // ¥ print htmlentities('¥'); // ¥ print htmlspecialchars('©'); // © print htmlentities('©'); // © print htmlspecialchars('×'); // × print htmlentities('×'); // × print htmlspecialchars('÷'); // ÷ print htmlentities('÷'); // ÷
ちなみにe()もhtmlentities。
ヘルパー関数のe()
もhtmlentitiesです。うーん、いやいいんだけどね。。
勘違いしてたのは私だけかもしれませんが、自分への戒めを込めてもう一度。
Laravelのはhtmlspecialcharsじゃなくてhtmlentitiesでした!!(> <)