В PHP, когда я использую ord
Функция для того, чтобы поймать ASCII-код моего персонажа, я получаю следующее поведение:
ord("a") // return 97
chr(97) // return a
Но когда я использую специальный символ, такой как Œ
доходы разные:
ord("Œ") // return 197
chr(197) // return �
Все мои страницы закодированы в utf8. Это поведение одинаково для большинства специальных символов.
Кто-нибудь видел эту проблему в прошлом? Как я могу это исправить?
ord()
а также chr()
оба используют значения символов ASCII, которые являются однобайтовой кодировкой. Not не является допустимым символом в ASCII.
Вы можете получить каждый байт многобайтового символа, указав смещение байта следующим образом:
$oethel = "Œ";
$firstByte = ord($oethel[0]); // 197
$secondByte = ord($oethel[1]); // 146
Однако обратный процесс не работает, потому что присвоение смещения байта строки преобразует эту строку в массив:
$newOethel = "";
$newOethel[0] = chr(197);
$newOethel[1] = chr(146);
echo $newOethel;
// Output is as follows:
// PHP Notice: Array to string conversion
// Array
Черный бриллиант с вопросительным знаком — проблема с отображением.
Ознакомьтесь с деталями черного алмаза в https://stackoverflow.com/a/38363567/1766831 . Есть два случая; посмотрим, какой из них подходит.