json_encode问题

问题:

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是不具备这个功能的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值