在扩展ASCII表中的ASCII字符上使用 PHP ord()函数时,我遇到了一个奇怪的问题:
<?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像素image(其中C对应于总数中的字符数),这就是我处理这种东西的原因。
我只是想知道如何使用以及如何应用我刚学到的关于PHP GD库的内容,所以我认为这将是一次很棒的培训!
提前感谢您的回答(对不起我的英语)!
答案 0 :(得分:3)
ord()
不支持utf-8。将此函数用于unicode字符:
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()
这两种字符。