PHPで特殊文字をエスケープする方法
初めまして、新卒2年目の岡崎です。今回は、PHPでHTMLタグなどに使われる特殊文字をエスケープする方法を紹介します。
なぜ特殊文字をエスケープする必要があるのか
プログラミングでは、特定の文字(<
、>
、&
、"
、'
等)が特別な意味を持つため、そのまま使用すると問題が発生する可能性があります。
例えば、HTMLやSQLでは"
や'
はデータの境界を示し、<script>
はブラウザで実行されるコードとして解釈される可能性があります。
特殊文字をエスケープすることで、これらの文字を「単なる文字」として扱い、意図しない動作やセキュリティリスクを防ぐことができます。
PHPで特殊文字をエスケープする方法
PHPで特殊文字をエスケープする場合、htmlspecialchars
関数を使います。htmlspecialchars
関数は、PHP 4以降で使えます。
$input = '<script>alert("test");</script>'; echo htmlspecialchars($input, ENT_QUOTES, "UTF-8");
出力結果
<script>alert("test");</script>
コードの解説
htmlspecialchars
関数は、HTMLで特別な意味を持つ文字をエスケープし、表示できるように変換します。
第二引数でよく使われる入るフラグを紹介します。
フラグ | 説明 |
---|---|
ENT_QUOTES |
ダブルクォート (" ) はエスケープするが、シングルクォート (' ) はそのまま |
ENT_NOQUOTES |
クォートをエスケープしない |
ENT_SUBSTITUTE |
文字エンコーディング(UTF-8 など)に存在しない文字を? に置き換える |
ENT_HTML401 |
HTML4.01のエンティティエンコードルールに従う |
htmlspecialchars
関数の公式ドキュメントはこちらです。
最後に
今回は、PHPでHTMLタグ等に使われる特殊文字をエスケープする方法を紹介しました。適切にエスケープを行うことで、予期しない動作を防いだり、セキュリティ対策をすることができます。
皆さんの何かのお役に立てれば幸いです。