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。