2010-06-01 3 views
2

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

+2

Что вы подразумеваете под специальными символами и кодом ASCII? Можете ли вы привести пример того, как такой специальный символ преобразуется в ASCII-код? – Gumbo

ответ

6

Существует ord function, который возвращает значение ASCII символа.

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

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

3

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

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

Во-вторых, некоторые кодировки используют многобайтные символы (например, utf-8), то есть один символ хранится как один или несколько байтов. У них нет кода ASCII, см., Например, Joel Spolsky's article on Unicode для более подробной информации.

+0

Хорошо, проблемы с кодировкой символов могут действительно наполнить вас, если вы не будете осторожны. –

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

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

Смежные вопросы