CodeLog

HTMLエンティティをおこなう

PHPでHTMLエンティティをおこなう方法を解説します。ソースなどの表示に役に立ちます。

HTMLエンティティをおこなう

HTMLエンティティとは、特殊文字を文字コードに変換すること(エンコード)です。文字コードに変換することで不正コードの防止やソース表示したい場合に役に立ちます。

PHPでHTMLエンティティをおこなう場合、htmlentities関数とhtmlspecialchars関数の2種類が用意されています。この2つの関数の違いは「変換する特殊文字の対象」です。

変換する特殊文字

  • htmlentities関数変換可能なすべての特殊文字
  • htmlspecialchars関数& " ' < >( " ' はオプションによります)

htmlentities関数は変換可能な特殊文字をすべて変換しますので入力フォームからの値を取得する際に不正なコードが送信されることを防止することなどに向いています。対してhtmlspecialchars関数はソースをHTMLで表示する場合の必要最低限の変換をおこないますのでソース表示に向いています。

htmlentities関数

htmlentities( 対象文字列, [オプション]);

オプション

ENT_COMPAT
ダブルクオート=変換する、シングルクオート=変換しない
ENT_QUOTES
ダブルクオート=変換する、シングルクオート=変換する
ENT_NOQUOTES
ダブルクオート=変換しない、シングルクオート=変換しない
echo htmlentities("<html></html>", ENT_QUOTES);

htmlspecialchars関数

htmlspecialchars( 対象文字列, [オプション]);

オプション

ENT_COMPAT
ダブルクオート=変換する、シングルクオート=変換しない
ENT_QUOTES
ダブルクオート=変換する、シングルクオート=変換する
ENT_NOQUOTES
ダブルクオート=変換しない、シングルクオート=変換しない
echo htmlspecialchars("<html></html>", ENT_QUOTES);

HTMLエンティティした文字を戻す

HTMLエンティティした文字を戻す(デコード)関数もPHPでは用意されています。

htmlentities関数でエンティティした文字はhtml_entity_decode関数で、htmlspecialchars関数でエンティティした文字はhtmlspecialchars_decode関数で戻すことができます。

html_entity_decode関数

html_entity_decode( 対象文字列, [オプション]);

オプション

ENT_COMPAT
ダブルクオート=変換する、シングルクオート=変換しない
ENT_QUOTES
ダブルクオート=変換する、シングルクオート=変換する
ENT_NOQUOTES
ダブルクオート=変換しない、シングルクオート=変換しない
echo html_entity_decode("&lt;html&gt;&lt;/html&gt;", ENT_QUOTES);

htmlspecialchars_decode関数

htmlspecialchars_decode( 対象文字列, [オプション]);

オプション

ENT_COMPAT
ダブルクオート=変換する、シングルクオート=変換しない
ENT_QUOTES
ダブルクオート=変換する、シングルクオート=変換する
ENT_NOQUOTES
ダブルクオート=変換しない、シングルクオート=変換しない
echo htmlspecialchars_decode("&lt;html&gt;&lt;/html&gt;", ENT_QUOTES);

関数化する

HTMLエンティティをソース上で使うこともよくありますが、関数名が長くオプションもあるので面倒に感じることもあります。なので関数化しておくと便利です。

function he($str){
	echo htmlentities($str, ENT_QUOTES);
}
function hs($str){
	echo htmlspecialchars($str, ENT_QUOTES);
}
function hed($str){
	echo html_entity_decode($str, ENT_QUOTES);
}
function hsd($str){
	echo htmlspecialchars_decode($str, ENT_QUOTES);
}

関数化しておくことでソースが多少シンプルになります。

<?php echo htmlspecialchars("<p>文字</p>", ENT_QUOTES); ?>

<?php hs("<p>文字</p>"); ?>