PHP字符串的字符是否已签名或未签名,以及为什么ord(“Ø”)不匹配扩展ASCII表?

时间:2014-12-15 11:49:20

标签: php string char ascii extended-ascii

尝试以下代码:

<?php

echo "ORD ~ = ".ord("~");

基于扩展的ASCII表 - &gt; 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之类等等),以及PHP没有 char 类型,PHP在处理1字节字符时如何单独处理它,例如使用前面的ord()函数和pack()和unpack()函数?

PHP char未签名还是已签名?有什么区别?

我应该如何理解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

256-character意味着它支持扩展的ASCII?但是为什么那些在扩展ASCII字符上调用ord()的差异呢?

感谢您的关注!

1 个答案:

答案 0 :(得分:1)

现在的PHP核心没有字符编码的概念。字符串只是 - 手动状态 - 字节序列(无符号8位)。输出媒体如何插入这些字节是......超出php 在你的例子中,Ø可能是utf-8编码的,即两个字节195和152 PHP不知道编码将这两个字节视为两个单独的单字节“字符”。 ord()只考虑字符串中的第一个“字符”,因此您获得195 所以答案是:unsigned,根本没有charset ......只是带有长度指示符的字节。