読者です 読者をやめる 読者になる 読者になる

青魔道士SEのブログ

PHPエンジニアです。得意技はラーニング。ITと日常のことつぶやきます。

Laravelの{{ }}はhtmlspecialcharsではなくhtmlentitiesだった

PHP Laravel

勘違いしてました。

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