PHP 字符串的字符是有符号还是无符号,以及为什么例如 ord(“Ø”) 不匹配扩展的 ASCII 表


Are PHP strings' chars signed or unsigned and why e.g. ord("Ø") is not matching extended ASCII table?

尝试下面的代码:

<?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.
所以答案是:没有签名,根本没有字符集......只是带有长度指示符的字节。

相关文章: