mb_encode_numericentityとは
マニュアル
http://www.php.net/manual/ja/function.mb-encode-numericentity.php
http://www.php.net/manual/ja/function.mb-decode-numericentity.php
文字を数値参照に変換してくれる関数なのだが
変換したい領域の指定方法が複雑だったので書いておく
領域は第二引数に配列で指定する
添字0がUnicode値の始まり、1が終わり、2が変換後の位置、3がマスク値である
領域を複数指定するには、同じ順序で値を追加してやる
つまり2つ目の領域を指定するには添字の4から7を使う、3つ目は8から11を使う
<?php $string = "<>"; $convmap = array( 0x3C, 0x3C, 0, 0xFFFF, // < 0x3E, 0x3E, 0, 0xFFFF // > ); $result = mb_encode_numericentity($string, $convmap, "UTF-8"); var_dump($result); // string(10) "<>"
添字2の値は変換後の数値に加算され、そのあとで添字3の値でマスク(ビット演算の&)される
<?php $string = "<>"; $convmap = array( 0x3C, 0x3C, 2, 0xFFFF, // < 0x3E, 0x3E, 2, 0xFFFF // > ); $result = mb_encode_numericentity($string, $convmap, "UTF-8"); var_dump($result); // string(10) ">@"
mb_decode_numericentityはその逆を行う
数値参照から添字2の値を引いた値が領域に含まれる場合はそれを文字に戻す
添字3の値は無視される
<?php $string = "<>"; $convmap = array( 0x3C, 0x3C, 0, 0xFFFF, // < 0x3E, 0x3E, 0, 0xFFFF // > ); $result = mb_encode_numericentity($string, $convmap, "UTF-8"); var_dump($result); // string(10) "<>" $result = mb_decode_numericentity($result, $convmap, "UTF-8"); var_dump($result); // string(2) "<>"