PHPで特殊文字をエスケープする方法

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");

出力結果

&lt;script&gt;alert(&quot;test&quot;);&lt;/script&gt;

コードの解説

htmlspecialchars関数は、HTMLで特別な意味を持つ文字をエスケープし、表示できるように変換します。

  • 第一引数:エスケープしたい文字列
  • 第二引数:エスケープの対象となる文字を指定するフラグ
  • 第三引数:文字コード(通常は "UTF-8" を指定)

第二引数でよく使われる入るフラグを紹介します。

フラグ 説明
ENT_QUOTES ダブルクォート (") はエスケープするが、シングルクォート (') はそのまま
ENT_NOQUOTES クォートをエスケープしない
ENT_SUBSTITUTE 文字エンコーディングUTF-8 など)に存在しない文字を?に置き換える
ENT_HTML401 HTML4.01のエンティティエンコードルールに従う

htmlspecialchars関数の公式ドキュメントはこちらです。

www.php.net

最後に

今回は、PHPでHTMLタグ等に使われる特殊文字エスケープする方法を紹介しました。適切にエスケープを行うことで、予期しない動作を防いだり、セキュリティ対策をすることができます。

皆さんの何かのお役に立てれば幸いです。