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 ではありません。