PHP Турки sh Символы в ASCII дают одинаковый вывод - PullRequest
0 голосов
/ 25 марта 2020

ord ('Ö') дает 195, а также ord ('Ç') тоже дает 195. Я не понял, в чем ошибка. Ребята, вы можете мне помочь?

1 Ответ

1 голос
/ 25 марта 2020

ord - Преобразовать первый байт строки в значение от 0 до 255

https://www.php.net/manual/en/function.ord.php

Вопрос - что за кодировка исходного файла? Поскольку 'Ö' и 'Ç' не являются символами ASCII, они представлены в виде двух байтов в кодировке UTF-8

Ö - 0xC3 0x96

Ç - 0xC3 0x87

Как видите, оба символа имеют первые байты 0xC3 (= 195 de c.)

Итак, вам нужно решить, какой код вы хотите получить?

Например, вы Можно преобразовать строку UTF-8 в Windows -1254:

print ord(iconv('UTF-8', 'Windows-1254', 'Ö')); // 214
print ord(iconv('UTF-8', 'Windows-1254', 'Ç')); // 199

Или вы можете получить Unicode Кодовая точка . Для этого вы можете сначала преобразовать строку в UTF-32, а затем декодировать 32-разрядное число:

function get_codepoint($utf8char) {
    $bin = iconv('UTF-8', 'UTF-32BE', $utf8char); // convert to UTF-32 big endian
    $a = unpack('Ncp', $bin); // unpack binary data
    return $a['cp']; // get the code point
}
print get_codepoint('Ö'); // 214
print get_codepoint('Ç'); // 199

Или в php 7.2 и более поздних версиях вы можете просто использовать mb_ord

print mb_ord('Ö'); // 214
print mb_ord('Ç'); // 199
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...