Получить значение ASCII расширенных символов ASCII в php

Я пытаюсь получить значение ASCII некоторого символа, который находится в расширенном наборе символов ASCII.

Нравится:

echo ord('„');

Его выход: 226

Но фактическое значение ASCII: 132.

Мой вопрос: как получить фактическое значение ASCII для тех символов, размер которых превышает 1 байт?


person Rashad    schedule 04.03.2015    source источник
comment
Как вы получили это значение? theasciicode.com.ar/расширенный-ascii-код/   -  person Praveen Srinivasan    schedule 04.03.2015
comment
@Cracker › См. этот ascii-code.com   -  person Rashad    schedule 04.03.2015
comment
Как вы сказали, что 132 является фактическим значением '„'? asciitable.com   -  person Praveen Srinivasan    schedule 04.03.2015


Ответы (2)


ord просто берет первый байт данной строки и возвращает его числовое значение в десятичной форме. Если это не дает вам того, что вы ожидаете, вероятно, ваш вклад не соответствует вашим ожиданиям. Если вам нужно байтовое значение расширенного ASCII, ваша входная строка должна быть закодирована в расширенном ASCII. В настоящее время вы, вероятно, получаете значение первого байта E2 80 9E, кодировку UTF-8 для «„», потому что ваш ввод на самом деле закодирован в UTF-8, потому что ваш файл исходного кода сохранен как UTF-8.

person deceze♦    schedule 04.03.2015
comment
Можете привести какой-нибудь практический пример. Бтв спасибо за информацию. :) - person Rashad; 04.03.2015
comment
Практический пример чего именно? Перейдите в свой текстовый редактор и сохраните файл кода, закодированный как Extended ASCII (или, вероятно, Latin-1 или что-то подобное), тогда вы получите ожидаемый результат. Однако я не знаю, чего вы на самом деле хотите добиться, может быть, вам действительно нужно что-то совершенно другое. - person deceze♦; 04.03.2015

Я нашел решение здесь. Ваш символ равен 8222 в кодировке utf8 и называется многобайтовым символом (mb) или html. особый объект.

function mb_ord($string)
{
    if (extension_loaded('mbstring') === true)
    {
        mb_language('Neutral');
        mb_internal_encoding('UTF-8');
        mb_detect_order(array('UTF-8', 'ISO-8859-15', 'ISO-8859-1', 'ASCII'));

        $result = unpack('N', mb_convert_encoding($string, 'UCS-4BE', 'UTF-8'));

        if (is_array($result) === true)
        {
            return $result[1];
        }
    }

    return ord($string);
}
echo mb_ord('„');
person Szaby    schedule 04.03.2015
comment
Правильно ... но на самом деле 132 - это не тот символ ... @Rashad, вероятно, нашел неправильную таблицу ascii :) ... ее 8222 в кодировке utf - person Szaby; 04.03.2015