символ — PHP функция chr и ord со специальными символами

В PHP, когда я использую ord Функция для того, чтобы поймать ASCII-код моего персонажа, я получаю следующее поведение:

ord("a") // return 97
chr(97) // return a

Но когда я использую специальный символ, такой как Œ доходы разные:

ord("Œ") // return 197
chr(197) // return �

Все мои страницы закодированы в utf8. Это поведение одинаково для большинства специальных символов.

Кто-нибудь видел эту проблему в прошлом? Как я могу это исправить?

2

Решение

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
1

Другие решения

Черный бриллиант с вопросительным знаком — проблема с отображением.

Ознакомьтесь с деталями черного алмаза в https://stackoverflow.com/a/38363567/1766831 . Есть два случая; посмотрим, какой из них подходит.

0