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でした!!(> <)