PHP ord () функция в расширенной таблице ASCII

Я сталкиваюсь со странной проблемой с PHP ord () функция при использовании его для символов ASCII из расширенной таблицы ASCII:

<?php
echo ord('!'); // prints 33 : OK
echo ord('a'); // prints 97 : OK

echo ord('é'); // prints 195 : NOT OK
echo ord('ü'); // prints 195 : NOT OK
?>

У вас есть идея, почему эта функция имеет такое поведение?

Кроме того, я хотел бы указать, что я на самом деле пытаюсь создать действительно простую стеганографическую программу, которая преобразует символьное сообщение в свое двоичное представление (используя таблицу ASCII), а затем создает простое черно-белое изображение размером 8xC пикселей (где C соответствует общему количеству символов) и именно поэтому я имею дело с такими вещами.

Мне было просто интересно, как использовать и как применить то, что я только что узнал о библиотеке PHP GD, поэтому я подумал, что это будет отличное обучение!

Заранее спасибо за ваши ответы (и извините за мой английский)!

3

Решение

ord() не поддерживает utf-8. Используйте эту функцию для символов Юникода:

function uniord($u) {
$k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
$k1 = ord(substr($k, 0, 1));
$k2 = ord(substr($k, 1, 1));
return $k2 * 256 + $k1;
}

echo ord('!'); // prints 33 : OK
echo ord('a'); // prints 97 : OK

echo uniord('é'); //233
echo uniord('ü'); //252

PS: вы можете использовать uniord() для обоих типов персонажей идеально.

3

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

Других решений пока нет …

По вопросам рекламы [email protected]