怎样让 php 的 json_encode() 兼容任何编码?

2011-07-09 14:32:58 +08:00
 darasion
事情是这样的

json_encode() 只支持兼容utf-8编码的东西。如果不是就会报错500.。

要编成 json 传输到浏览器端,输入数据的编码可能是随机的任何编码,要让这些内容正常显示。
4279 次点击
所在节点    问与答
8 条回复
TheOnly92
2011-07-09 14:43:20 +08:00
mb_convert_encoding($input, 'UTF-8')
darasion
2011-07-09 14:44:32 +08:00
@TheOnly92 这个函数试过,但是它却把正常能显示的东西编码成什么都看不清的乱码了。。。
TheOnly92
2011-07-09 14:47:26 +08:00
你应该至少控制一下输入数据的编码,在 <head> 内加 <meta charset> 输入进来的就都是 UTF-8 了,还是说这些数据是前人留下来的?
darasion
2011-07-09 15:01:14 +08:00
@TheOnly92 呵呵,需求特殊,这个是从海量文件里 cat 出来的内容,事先不可能知道是什么编码。也许编码根本不符合规则。要做个很智能,很兼容的东西出来..
TheOnly92
2011-07-09 15:23:17 +08:00
如果要编成 json 的数据不是很复杂,就用 $out = '["' . implode('","', $return_arr) . '"]'; 这样简单的就行了吧。否则就得想办法把所有数据转变为 UTF-8
darasion
2011-07-09 15:51:46 +08:00
@TheOnly92 ...很不幸,两个条件都无法满足。

一、很复杂;
二、没办法都变utf8。

算了,这个问题我还是搁置吧....
darasion
2011-07-09 16:12:04 +08:00
我换个角度来问:

mb_detect_encoding($str, array('gbk','utf-8',..........)) 这个函数,以什么样的判断顺序为佳?

有种如果 我把 utf-8放在 gbk的前边,那么很多时候gbk会被判断成utf-8, 最终给json_encode编码还是会出错。 如果我把gbk放在前边,那么会不会utf-8被判断成gbk?

怎样的顺序才能兼容所有编码?
TheOnly92
2011-07-09 16:18:32 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/15538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX