开发者

convert special character to ascii by using PHP

Is there any built-in function in PHP to convert special characters to it's ascii code?开发者_StackOverflow社区


Yes, the ord function

See the ord manual page

EDIT: there's also chr to do the opposite.


There is the ord function which returns the ASCII value of a character.

There is also its converse chr which takes an ASCII number and returns the character.

If you are trying to convert characters from one character set to another, then you can use the iconv library


The previous responses are correct, as long as you are using plain ASCII (which means only basic English alphabet lower+uppercase, Arabic numbers and basic English punctuation). Once you are using more than that, character encodings come into play.

First of all, you always need to keep in mind what encoding you're using - some characters don't even exist in some encodings (plain ASCII only contains 127 characters), some exist in one encoding but not another, etc. So you need to know what encoding you're using.

Second, some encodings use multi-byte characters (e.g. utf-8) - that is, one character is stored as one or more bytes. Those don't have an ASCII code, either - see e.g. Joel Spolsky's article on Unicode for more details.


Try this function:

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;
    }
}

The first parameter is the string, the second the starting index (if you specify only one special character, then this will be zero).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜