尝试下面的代码:
<?php
echo "ORD ~ = ".ord("~");
基于扩展的 ASCII 表 -> http://www.ascii-code.com/输出为
ORD ~ = 126
这是正确的,但是当在扩展的ASCII表中输出某些内容时,例如Ø:
<?php
echo "ORD Ø = ".ord("Ø");
给:
ORD Ø = 195
而在链接的扩展 ASCII 表中,"Ø"的正确代码是 216。例如,对于√也是如此(ord("√"(输出226
而226的正确扩展ASCII字符是â,√甚至不在表中(。
所以我的问题是,由于 PHP 字符串基本上是一个字符串数组(第一个字符为 $str[0],第二个字符为 $str[1],C like等...(,并且由于 PHP 没有 char 类型,PHP 如何处理 1 字节字符当它单独处理它时,例如使用以前的 ord(( 函数和 pack(( 和 unpack(( 函数?
PHP 字符是未签名的还是有符号的?有什么区别?
我应该如何解释这个短语A string is series of characters, where a character is the same as a byte. This means that PHP only supports a 256-character set
取自 PHP 手册?
256-character
意味着它支持扩展的ASCII?但是为什么在扩展的 ASCII 字符上调用 ord(( 时会出现这些差异呢?
感谢您的关注!
目前的PHP核心没有字符编码的概念。字符串只是 - 正如手动状态 - 字节系列(无符号 8 位(。输出介质如何插入这些字节是...超越PHP。
在您的示例中,Ø 可能已进行 utf-8 编码,即作为两个字节 195 和 152。
不知道编码的PHP将这两个字节视为两个单独的单字节"字符"。 ord()
只考虑字符串中的第一个"字符",因此您可以得到195
.
所以答案是:没有签名,根本没有字符集......只是带有长度指示符的字节。