Я сталкиваюсь со странной проблемой с 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, поэтому я подумал, что это будет отличное обучение!
Заранее спасибо за ваши ответы (и извините за мой английский)!
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()
для обоих типов персонажей идеально.
Других решений пока нет …