PHP で文字の Unicode 値を取得したり、その逆を行ったりできますか? 質問する

PHP で文字の Unicode 値を取得したり、その逆を行ったりできますか? 質問する

文字を入力して Unicode 値を取得することは可能ですか? たとえば、HTML に ⽇ を入力して "⽇" を出力できますが、その文字を関数の引数として渡し、Unicode テーブルを構築せずに数値を出力として取得することは可能ですか?

$val = someFunction("⽇");//returns 12103

それともその逆でしょうか?

$val2 = someOtherFunction(12103);//returns "⽇"

コードではなく実際の文字をページに出力できるようにしたいのですが、可能であれば文字からコードを取得できるようにしたいと思います。私が求めているものに最も近いのは php.net/manual/en/function.mb-decode-numericentity.php ですが、動作しません。これは必要なコードですか、それとも間違った方向に進んでいるのでしょうか?

ベストアンサー1

function _uniord($c) {
    if (ord($c[0]) >=0 && ord($c[0]) <= 127)
        return ord($c[0]);
    if (ord($c[0]) >= 192 && ord($c[0]) <= 223)
        return (ord($c[0])-192)*64 + (ord($c[1])-128);
    if (ord($c[0]) >= 224 && ord($c[0]) <= 239)
        return (ord($c[0])-224)*4096 + (ord($c[1])-128)*64 + (ord($c[2])-128);
    if (ord($c[0]) >= 240 && ord($c[0]) <= 247)
        return (ord($c[0])-240)*262144 + (ord($c[1])-128)*4096 + (ord($c[2])-128)*64 + (ord($c[3])-128);
    if (ord($c[0]) >= 248 && ord($c[0]) <= 251)
        return (ord($c[0])-248)*16777216 + (ord($c[1])-128)*262144 + (ord($c[2])-128)*4096 + (ord($c[3])-128)*64 + (ord($c[4])-128);
    if (ord($c[0]) >= 252 && ord($c[0]) <= 253)
        return (ord($c[0])-252)*1073741824 + (ord($c[1])-128)*16777216 + (ord($c[2])-128)*262144 + (ord($c[3])-128)*4096 + (ord($c[4])-128)*64 + (ord($c[5])-128);
    if (ord($c[0]) >= 254 && ord($c[0]) <= 255)    //  error
        return FALSE;
    return 0;
}   //  function _uniord()

そして

function _unichr($o) {
    if (function_exists('mb_convert_encoding')) {
        return mb_convert_encoding('&#'.intval($o).';', 'UTF-8', 'HTML-ENTITIES');
    } else {
        return chr(intval($o));
    }
}   // function _unichr()

おすすめ記事