PHP 字符异常

Author Avatar
木易子修 8月 26, 2016

php作为一门弱类型语言!字符串的处理显得要比强类型语言要灵活且复杂很多!隐藏的类型转换,较多的字符串处理函数,中文字符的处理,转义等等无疑是有很多坑的!

字符串乱码的问题其实比较好解决,无非就是做到正确的编码,但是utf-8编码却有个小插曲!为了让程序更好地区分unicode编码采用的实现方式,头部带了几个不可见字符(也就是BOM),目前普遍采用utf-8的编码格式的情形下,带BOM的php脚本在被require活着include之后就会出现问题,在

1
<?php

之前的文本会被当做文本流输出到标准输出中!然而0xEF,0xBB,0xBF这三个字符是不可见的,导致正常的输出变成了类似于乱码的格式!由于windows普遍鸟BOM,而unix普通不鸟BOM,同一份代码可能表现上不同,有BOM的在输出上会出现字符异常!实际上编码也是正常的,把不可见字符删除就行了!

同理而言,在

1
<?php

之前的不可见字符都有可能导致字符异常,因为php大多数情形下是以输出作为返回值的,所以不可见字符可能导致很多类似于,头几个字母乱码,非正常json等现象!

另外值得一提的是,json_encode 会对中文字符进行unicode转义,以及在类型比较的时候会发生隐藏的类型转换!这两者在开发过程中都是比较常见的,在暗流涌动的php代码上,我们要在自以为上面多一层验证,php的测试是很必要的;