php的ord与chr函数疑问

问题描述:

php的ord与chr函数疑问
我一直以为php是采用ASCII 码
php的ord函数说的是返回字符的ASCII 码,但是给他个汉字他也能返回,这说明他采用的应该不是ASCII 编码应该是utf-8或gb2312一类的编码把
chr函数能返回一个编码大于127的字符,这也说明php采用的不是ASCII编码
我原本以为php和c/c++一样吧int型赋值给char型时取int型最后一个字节,看来我错了,谁知道php对编码转换的细节能说下吗.
1个回答 分类:综合 2014-11-10

问题解答:

我来补答
楼主你错了,php并不是采用什么编码的问题,而是你要输出的编码问题
你把php写成u8/gb2312它都可以正常使用,区别在于,在chr里得到的是什么,chr虽然可以返回一个编码大于127的字符,但是这并不意味着php可以正常解析u8/gb2312,一个汉字在GB2312中由两个字节组成,也就是FFFF,而在u8里是FFFFFF,而chr只拿到了第一个FF,也就是255,它并不能直接得到任何汉字的直接编码
而实际上ASCII和GB2312是兼容的,这也是为什么chr可以正常取值的原因,因为chr并不是为了可录入的字符串取值的,它可以安全用于任何的二进制编码,包括图像文件
给你个例子你看看
echo ord('我');
这里只能返回230,我是以u8保存的文件并输出的,它得到的只有230,而230转换成hex是E6,实际上u8中我的编码是E68891,这样你就明白了吧,其实它只拿到了第一个字节
echo chr(0xE6).chr(0x88).chr(0x91);
这里例子可以在u8的情况下输出我这个汉字,你看到了,这里用了3次chr才得到这个汉字
 
 
展开全文阅读
剩余:2000