преобразовать специальный символ в ascii с помощью PHP - PullRequest
2 голосов
/ 01 июня 2010

Есть ли в PHP встроенная функция для преобразования специальных символов в код ascii?

Ответы [ 4 ]

7 голосов
/ 01 июня 2010

Да, функция ord

См. Страницу руководства ord

РЕДАКТИРОВАТЬ: есть также chr, чтобы сделать обратное.

6 голосов
/ 01 июня 2010

Существует функция ord , которая возвращает значение ASCII символа.

Существует также обратное chr , которое принимает номер ASCII и возвращает символ.

Если вы пытаетесь преобразовать символы из одного набора символов в другой, то вы можете использовать библиотеку iconv

3 голосов
/ 01 июня 2010

Предыдущие ответы верны, , если вы используете простой ASCII (что означает только базовый английский алфавит нижний + верхний регистр, арабские цифры и базовую английскую пунктуацию) Как только вы используете более этого, в игру вступают кодировки символов.

Прежде всего, вам всегда нужно помнить, какую кодировку вы используете - некоторые символы даже не существуют в некоторых кодировках (обычный ASCII содержит только 127 символов), некоторые существуют в одной кодировке, но не в другой, и т. Д. Поэтому вам нужно знать, какую кодировку вы используете.

Во-вторых, некоторые кодировки используют многобайтовые символы (например, utf-8), то есть один символ сохраняется как один или несколько байтов. У них также нет кода ASCII - см., Например, Статья Джоэла Спольски о Unicode для более подробной информации.

0 голосов
/ 01 июня 2010

Попробуйте эту функцию:

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

Первый параметр - это строка, второй - начальный индекс (если вы укажете только один специальный символ, то это будет ноль).

...