我正在尝试获取扩展 ASCII 字符集中的某些字符的 ASCII 值。
喜欢:
echo ord('„');
它的输出是:226
但实际的 ASCII 值是:132。
我的问题是如何获得那些大于 1 字节大小的字符的实际 ASCII 值?
我正在尝试获取扩展 ASCII 字符集中的某些字符的 ASCII 值。
喜欢:
echo ord('„');
它的输出是:226
但实际的 ASCII 值是:132。
我的问题是如何获得那些大于 1 字节大小的字符的实际 ASCII 值?
ord
只需获取给定字符串的第一个字节并以十进制形式返回其数值。如果它没有给你你所期望的,很可能你的输入不是你所期望的。如果您想要扩展 ASCII 的字节值,那么您的输入字符串必须以扩展 ASCII 编码。目前,您可能会获得 的第一个字节的值,即E2 80 9E
“„”的 UTF-8 编码,因为您的输入实际上是 UTF-8 编码的,因为您的源代码文件保存为 UTF-8。
我在这里找到了解决方案。您的字符是 utf8 编码的 8222,它被称为多字节字符 (mb) 或html 特殊实体。
function mb_ord($string)
{
if (extension_loaded('mbstring') === true)
{
mb_language('Neutral');
mb_internal_encoding('UTF-8');
mb_detect_order(array('UTF-8', 'ISO-8859-15', 'ISO-8859-1', 'ASCII'));
$result = unpack('N', mb_convert_encoding($string, 'UCS-4BE', 'UTF-8'));
if (is_array($result) === true)
{
return $result[1];
}
}
return ord($string);
}
echo mb_ord('„');