3

在扩展 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 像素图像(其中C 对应于总字符数),这就是我要处理这种东西的原因。

我只是想知道如何使用以及如何应用我刚刚学到的关于 PHP GD 库的知识,所以我认为这将是一次很棒的培训!

提前感谢您的回答(对不起我的英语)!

4

1 回答 1

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()完美地使用这两种类型的字符。

于 2015-10-02T16:27:26.287 回答