aoma blog

エンジニアの日常とか技術とか

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です。うーん、いやいいんだけどね。。

ヘルパー関数 5.1 Laravel

勘違いしてたのは私だけかもしれませんが、自分への戒めを込めてもう一度。

Laravelの{{ }}はhtmlspecialcharsじゃなくてhtmlentitiesでした!!(> <)