PHP在使用json_encode()函数将数组对象转化为json格式字符串时有可能会存在转换之后值为空字符串。
原因分析:
因为json_encode()只支持UTF-8编码格式转换,如果遇到其他格式中文字符可能转化为乱码或者空字符串。
如果文件的编码格式设为其他格式而在转换时就会出错;
还有一种很难发现的的情况就是:
从数据库中读出的中文字段,然而并没不清楚或注意字符编码,在使用json_encode()转化为json字符串返回前端时很可能返回为空字符串,因为不清楚数据库字段编码格式,这种问题很难发现。
解决办法:
如果已知字符编码格式,则在转换前先对中文字符串转换编码格式:
iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件。
iconv函数在php5中内置,GB字符集默认打开。
例:$str = '我爱CSDN';
iconv('GB2312', 'UTF-8', $str); //将字符串的编码从GB2312转到UTF-8
iconv()有时也会出错
iconv在转换字符”—”到gb2312时会出错,解决方法是在需要转成的编码后加 “//IGNORE”,也就是iconv函数 第二个参数后。如下:
iconv("UTF-8", "GB2312//IGNORE", $data)
ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。