【问题标题】:Get ASCII value of extended ASCII characters in php在php中获取扩展ASCII字符的ASCII值
【发布时间】:2015-03-04 06:48:09
【问题描述】:

我正在尝试获取扩展 ASCII 字符集中的某些字符的 ASCII 值。

喜欢:

echo ord('„');

它的输出是:226

但实际的 ASCII 值是:132。

我的问题是如何获取那些大于 1 字节大小的字符的实际 ASCII 值?

【问题讨论】:

标签: php ascii php-5.5 extended-ascii


【解决方案1】:

ord 只取给定字符串的第一个字节并以十进制形式返回其数值。如果它没有给你你所期望的,很可能你的输入不是你所期望的。如果您想要扩展 ASCII 的字节值,那么您的输入字符串必须以扩展 ASCII 编码。目前,您可能会获得E2 80 9E 的第一个字节的值,即“„”的 UTF-8 编码,因为您的输入实际上是 UTF-8 编码的,因为您的源代码文件保存为 UTF-8。

【讨论】:

  • 你能举个实际的例子吗?顺便说一句,感谢您提供的信息。 :)
  • 实际例子究竟是什么?转到您的文本编辑器并保存编码为扩展 ASCII(或可能是 Latin-1 等)的代码文件,然后您将获得预期的结果。但是,我不知道您真正想在这里实现什么,也许您实际上完全需要其他东西。
【解决方案2】:

我找到了solution here。 您的字符是 utf8 编码的 8222,称为多字节字符 (mb) 或 html special entity

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('„');

【讨论】:

  • 对...但实际上 132 不是那个字符...@Rashad 可能发现了一个错误的 ascii 表:)...它的 8222 采用 utf 编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 2013-03-19
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多