【当ブログではアフィリエイト広告を利用しています】

[PHP] HTML(タグ)をエスケープ処理する関数「htmlspecialchars」「htmlentities」

attention この記事は2年以上前の投稿になります。
記載された情報が古くなっている可能性がございますので十分ご注意ください。

利用者に文字を入力させる場合にXSS(クロスサイトスクリプティング)対策でエスケープ処理をします。

PHPでは、よくこの2つの関数「htmlspecialchars」「htmlentities」が使われますが、内容を理解しないまま使用すると思わぬ失敗をします。

どちらの関数も「HTML エンティティに変換する」という意味では同じです。

違いは変換する種類が異なります。
htmlentities > htmlspecialchars

注意しなければいけないのは、htmlspecialchars は「&」「"」「<」「>」の4つしか変換しないこと。

さらに、htmlentities を使えば何も考えなくて良いわけではなく、標準ではシングルクォート「'」は変換されないこと。

どちらの関数にも第2引数を指定する(ENT_QUOTES)ことで、シングルクォートも変換してくれます。

あと、これは個人的な見解ですが、やみくもにエスケープすれば良いわけではありません。(漏れるぐらいならやっておけという考え方もわかりますが)
入力値を画面出力させないものや、既に入力チェックされた文字列までエスケープする必要はないのです。
ちゃんと、いつ使うべきか、なぜ使うのかを考えて利用すべきと思います。

ご意見・ご感想をお待ちしております。

いただいた情報は一般公開されません。(入力いただいたメールアドレスにてご返信させていただきます)
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。