0

PHP ライブラリにはmb_ord()関数がありません...つまり、ord()関数が行うことを行うものですが、UTF8 (または「mb」マルチバイト、つまり「mb_ord」) 用です。私はここからいくつかの手がかりを使いました、

 $ord = hexdec( bin2hex($utf8char) ); //decimal 

そして、それmb_substr($text, $i, 1, 'UTF-8')は「1 utf8-char」を取得すると思います...しかし、 $ord は期待する値を返しません。

環境

このコードは機能しません: 177 (plusmn) のようなコードは表示されません。

 $msg = '';
 $text = "... a UTF-8 long text... Ą ⨌ 2.5±0.1; 0.5±0.2 ...";
 $allOrds = array(); 
 for($i=0; $i<mb_strlen($text, 'UTF-8'); $i++) {
    $utf8char = mb_substr($text, $i, 1,  'UTF-8'); // 1=1 unicode character?
    $ord = hexdec( bin2hex($utf8char) ); //decimal 
    if ($ord>126) { //non-ASCII
      if (isset($allOrds[$ord])) $allOrds[$ord]++; else $allOrds[$ord]=1;
    }
 }
 foreach($allOrds as $o=>$n)
    $msg.="\n entity #$o occurs $n times";
 echo $msg;

出力

entity #50308 occurs 1 times
entity #14854284 occurs 1 times
entity #49841 occurs 2 times

したがって (エンティティ テーブルを参照)、49841 は 177 ではなく、14854284 (iiiint) は 10764 ではありません。

4

1 に答える 1