エスケープ文字のエンティティ
エスケープ文字は、もじ列の中で特別な意味を持つものを指します。エスケープ文字であるかどうかはその文字の前後関係によって決まります。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()を利用することが多いようです。