the2g

htmlspecialcharsの変換条件を増やす

目次
PHP

htmlspecialcharsで変換される内容は、get_html_translation_tableで得られる変換テーブルで取得できる。以下はENT_QUOTESの場合。

$table = get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES);
var_dump($table);

array(5) {
  ["""]=>
  string(6) """
  ["&"]=>
  string(5) "&"
  ["'"]=>
  string(6) "'"
  ["<"]=>
  string(4) "<"
  [">"]=>
  string(4) ">"
}

ここに条件を加えると、htmlspecialcharsの変換条件を増やすことができる。例えばENT_QUOTESをオプションに与えたとき、空白文字もエンコードしたい場合は以下になる。

$h = htmlspecialchars('hello world', ENT_QUOTES, "UTF-8");
$table = get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES);
$table[' '] = '&nbsp;';
$encode = strtr($h, $table);

// string(84) "&lt;p id=&quot;test&quot;&gt;hello&nbsp;world&lt;/p&gt;"
var_dump($encode);

このように挙動を多少変えることができる。