Я пытаюсь получить значение ASCII некоторых символов, которые находятся в расширенном наборе символов ASCII.
Подобно:
echo ord('„');
Его вывод: 226
Но фактическое значение ASCII: 132.
Мой вопрос: как получить фактическое значение ASCII для символа, размер которого превышает 1 байт?
ord
просто берет первый байт данной строки и возвращает ее числовое значение в десятичной форме. Если это не дает того, что вы ожидаете, скорее всего, ваш вклад не соответствует вашим ожиданиям. Если вам нужно байтовое значение Extended ASCII, то ваша входная строка должна быть закодирована в Extended ASCII. В настоящее время вы, вероятно, получаете значение первого байта E2 80 9E
кодировка UTF-8 для «„ », потому что ваши входные данные на самом деле кодируются в кодировке UTF-8, потому что ваш файл исходного кода сохраняется как UTF-8.
Я нашел решение здесь.
Ваш символ 8222 в кодировке utf8 и называется многобайтовым символом (мб) или 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('„');