问题:
json_encode($str)函数,在转换$str时会将汉字转换成十六进制编码,html标签转义,比如">" -> ">","/'->"\/",如果$str中包含"<a>......</a>"这样的字符串,则会变为"<a>.....<\/a>"浏览器在显示的时候只找到了<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是不具备这个功能的。