现在的位置: 首页 > 综合 > 正文

json输出中文出问题

2017年11月26日 ⁄ 综合 ⁄ 共 790字 ⁄ 字号 评论关闭

问题:

json_encode($str)函数,在转换$str时会将汉字转换成十六进制编码,html标签转义,比如">" -> "&gt;","/'->"\/",如果$str中包含"<a>......</a>"这样的字符串,则会变为"<a>.....&lt;\/a&gt;"浏览器在显示的时候只找到了<a>标签,却没有找到</a>,所以把<a>后面的内容都作为连接处理。

解决办法:

在json_encode()输出前,调用 

header("Content-Type: application/json; charset=utf-8");

此语句作用是页面内容以json格式显示。

json_encode另外说明

json_encode函数只处理utf-8编码,如果参数不是utf-8编码,则返回null。

如果涉及到非utf-8编码的问题,需要在json_encode前进行转码。使用的函数有:mb_convert_encoding()和iconv(),搜索了两者区别,转述到下面:

iconv是有很多失败的时候,但可以使用忽略的选项,这样仅仅是几个“字”的错误。

另外我是一直在用iconv的,感觉仅仅是编码转换iconv够了,当然mb对多字节字符处理更好点。(例如汉字的截取。当然iconv转换成utf-8也不错)


iconv碰到一些符号之类的就中断了,后来只好用mb。但明显mb块头要大一些,速度方面应该不如iconv,但很少出错


iconv更快。但是,mb_string它能自动识别传入字符的编码,比如你可以这样用:
mb_convert_encoding( $string, 'UTF-8', 'UTF-8,GBK,GB2312,BIG5' );

如果传入的utf8,那么他不做任何转化直接输出。若是gbk之类的则转为utf8。当然,后面参数的次序不一样,效果也是不一样的。但是iconv是不具备这个功能的。

抱歉!评论已关闭.