使用PHP将特殊字符转换为ascii

时间:2010-06-01 08:48:32

标签: php ascii html-entities

PHP中是否有内置函数将特殊字符转换为ascii代码?

4 个答案:

答案 0 :(得分:7)

是的,ord功能

请参阅ord manual page

编辑:还有chr做相反的事情。

答案 1 :(得分:6)

ord function返回字符的ASCII值。

还有它的反转chr,它接受​​一个ASCII数字并返回该字符。

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

答案 2 :(得分:3)

之前的回答是正确的,只要你使用普通的ASCII (这意味着只有基本的英文字母低级+大写,阿拉伯数字和基本的英文标点符号)。一旦你使用了更多,字符编码就会发挥作用。

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

其次,某些编码使用多字节字符(例如utf-8) - 也就是说,一个字符存储为一个或多个字节。那些也没有ASCII码 - 参见例如Joel Spolsky's article on Unicode了解更多详情。

答案 3 :(得分: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;
    }
}

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