エスケープ文字のエンティティ

エスケープ文字は、もじ列の中で特別な意味を持つものを指します。エスケープ文字であるかどうかはその文字の前後関係によって決まります。htmlspecialchars()やhtmlentities()などは、特別な意味を持った文字をHTMLのエンティティへ変更するための関数です。エンティティは一般に文字実体参照のことを指すようですが、htmlspecialchars()でフラグに「ENT_QUOTES」と「ENT_HTML401」を指定した場合、シングルクォートは数値文字参照の「'」で表記されます。

htmlspecialchars()

htmlspecialchars()の構文は「htmlspecialchars(対象文字列 [, フラグ [, 文字セット [, 既存のhtmlエンティティをエンコードするかどうか]]]);」です。
htmlspecialchars()は特殊もじをHTMLエンティティへ変更します。変換されるものは、「&(アンパサンド)」「"(ダブルクォート)」「'(シングルクォート)」「<」「>」です。

フラグの定数

フラグの初期値は、「ENT_COMPAT」と「ENT_HTML401」です。

フラグの定数名 解説
ENT_COMPAT ダブルクォートを変換してシングルクォートを変換しません。
ENT_QUOTES ダブルクォートとシングルクォートのいずれも変換。
ENT_SUBSTITUTE 無効な符号単位シーケンスを含むもじ列に対して、空のもじ列ではなくUnicodeの置換もじに変更します。
ENT_DISALLOWED 無効な符号位置を、Unicodeの代替もじに変更します。
ENT_XML1 XML1としてコードを処理。
ENT_XHTML XHTMLとしてコードを処処理。
ENT_HTML401 HTML4.01としてコードを処理。
ENT_HTML5 HTML5としてコードを処理。
ENT_IGNORE 無効な符号単位シーケンスを含むもじ列に対して、空のもじ列ではなく無効な部分を切り捨てます。ただし、セキュリティーの問題が指摘されており、使うことは薦められていません。

文字セット

文字変換の際に用いるエンコーディングを指定します。htmlspecialchars()、 htmlentities()、html_entity_decode()で省略した場合、PHP5.6.0以降ではUTF-8がデフォルトになります。

既存のhtmlエンティティをエンコードするかどうか

デフォルトでは全て変換します。

htmlentities()

htmlentities()の構文は「htmlentities(対象文字列 [, フラグ [, 文字セット [, 既存のhtmlエンティティをエンコードするかどうか]]]);」です。
htmlentities()は名前付きエンティティに関連づけられたものを全て変換します。htmlspecialchars()に比較すると不要なものまで変更されるため、通常はhtmlspecialchars()を利用することが多いようです。