PHPで数値文字参照

はじめに
「PHP 数値文字参照」なんかで検索すると出てくる手法が不完全なので、備忘録。
mb_convert_encodingを利用する方法を記載する記事が多いが、記号が変換できない。
mb_convert_encodingで変換してみる
以下のコードの結果で、ひらがなや全角アルファベットは変換できているが、「$%&」などの記号がそのままになってしまっているのがわかる。
※𪘂𪘚𪚲は、UTF-8の4バイト文字。
$before = '$%&あいうABC𪘂𪘚𪚲';
$after = mb_convert_encoding($before, 'HTML-ENTITIES', 'UTF-8');
var_dump($after); // string(78) "$%&あいうABC𪘂𪘚𪚲"
mb_encode_numericentityで変換してみる
mb_encode_numericentity
こちらであれば、記号も無事に数値文字参照へと変換できる。
$before = '$%&あいうABC𪘂𪘚𪚲';
$map = [0, 0x10FFFF, 0, 0xFFFFFF];
$after = mb_encode_numericentity($before, $map, 'UTF-8');
var_dump($after); // string(90) "$%&あいうABC𪘂𪘚𪚲"
変換結果をHTMLで表示すれば、うまくいったことがわかる
■ source
$%&あいうABC𪘂𪘚𪚲
■ result
$%&あいうABC𪘂𪘚𪚲
2022-09-26 09:00:00
