2

PHP中是否有任何内置函数可以将特殊字符转换为它的ascii代码?

4

4 回答 4

7

是的,ord功能

请参阅ord 手册页

编辑:也有chr相反的做法。

于 2010-06-01T08:50:50.363 回答
6

有一个ord 函数,它返回一个字符的 ASCII 值。

还有它的 converse chr接受一个 ASCII 数字并返回字符。

如果您尝试将字符从一个字符集转换为另一个字符集,则可以使用iconv 库

于 2010-06-01T08:51:51.873 回答
3

前面的回答是正确的,只要你使用的是纯ASCII(这意味着只有基本的英文字母小写+大写,阿拉伯数字和基本的英文标点符号)。一旦你使用的不止这些,字符编码就会发挥作用。

首先,您始终需要记住您使用的是什么编码 - 有些字符甚至不存在于某些编码中(纯 ASCII 仅包含 127 个字符),有些存在于一种编码中但不存在于另一种编码中,等等。所以你需要知道您使用的是什么编码。

其次,一些编码使用多字节字符(例如 utf-8)——也就是说,一个字符被存储为一个或多个字节。那些也没有 ASCII 码 - 请参阅Joel Spolsky 的关于 Unicode 的文章了解更多详细信息。

于 2010-06-01T09:05:30.157 回答
0

试试这个功能:

function ordUTF8($c, $index = 0, &$bytes = null)
{
    $len = strlen($c);
    $bytes = 0;

    if ($index >= $len)
    {
        return false;
    }

    $h = ord($c{$index});

    if ($h <= 0x7F) 
    {
        return $h;
    }
    else if ($h < 0xC2)
    {
        return false;
    }
    else if ($h <= 0xDF && $index < $len - 1) 
    {
        return ($h & 0x1F) <<  6 | (ord($c{$index + 1}) & 0x3F);
    }
    else if ($h <= 0xEF && $index < $len - 2) 
    {
        return ($h & 0x0F) << 12 | (ord($c{$index + 1}) & 0x3F) << 6
                                | (ord($c{$index + 2}) & 0x3F);
    }           
    else if ($h <= 0xF4 && $index < $len - 3) 
    {
        return ($h & 0x0F) << 18 | (ord($c{$index + 1}) & 0x3F) << 12
                                 | (ord($c{$index + 2}) & 0x3F) << 6
                                 | (ord($c{$index + 3}) & 0x3F);
    }
    else
    {
        return false;
    }
}

第一个参数是字符串,第二个参数是起始索引(如果您只指定一个特殊字符,那么这将是零)。

于 2010-06-01T09:29:05.830 回答