php json encode 中文部分被替换为 unicode 码 ,应该怎么用最简单的方法解决?

2014-09-22 19:49:37 +08:00
 GPU
https://gist.github.com/anonymous/ba11f65bce1e78e601e1

代码如上 ,

此代码json输出网页的东西是这样子的
" {"msg":"username,password,domain \u53c2\u6570\u5fc5\u9009"}"


完整版如下,


https://gist.github.com/anonymous/def40484a0f37161673b
3096 次点击
所在节点    PHP
14 条回复
anewg
2014-09-22 19:52:28 +08:00
5.4 之后 echo json_encode("中文", JSON_UNESCAPED_UNICODE);

5.4 之前 echo json_encode(urlencode("中文"));接收端 json_decode 后再 urldecode
GPU
2014-09-22 20:02:28 +08:00
@anewg 5.4 是什么意思?
anewg
2014-09-22 20:10:07 +08:00
@GPU php版本5.4
GPU
2014-09-22 20:25:30 +08:00
@anewg
https://gist.github.com/anonymous/6d8f133df10314942724

改了一下, 成这样子 ,输出正常 .不知道有没有可以写得更简化的呢?
iyaozhen
2014-09-22 20:38:10 +08:00
其实没关系的,接收的时候php_decode会把编码还原。
js我用jquery接收,不用任何处理data.msg直接获取就行。
一楼说的php5.4之后的JSON_UNESCAPED_UNICODE参数可以直接输出中文。
zakokun
2014-09-22 21:44:08 +08:00
先把中文urlencode一下,处理完以后再转回来urldecode
anewg
2014-09-22 22:26:06 +08:00
@GPU 你用5.4以上的php的话这样是最简了
GPU
2014-09-22 22:51:47 +08:00
@anewg 嗯. 好的.
bombless
2014-09-23 07:27:35 +08:00
我还以为是指读不出来unicode编码呢…
这种编码算是一种惯例了,不明白为啥要改
tmkook
2014-09-23 09:08:50 +08:00
function jsonEncode($arr){
$json = json_encode($arr);
return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $json);
}

放出我的必杀技!!!
GPU
2014-09-23 11:18:34 +08:00
@tmkook 看不懂啊
tmkook
2014-09-23 19:52:56 +08:00
@GPU echo jsonEncode(array("test":"中文")); 生成:{"test":"中文"}
GPU
2014-09-23 23:22:45 +08:00
@tmkook 这个技能貌似真的很屌
Actrace
2014-09-24 09:01:03 +08:00
一个比较容易懂的做法是先把数组内的元素都用urlencode处理成不需要转换的字符串,然后生成JSON字符串后再用urldecode来对整个JSON字符串进行解码(中文等将被还原),类似于金属提纯.
不过看了10楼的做法,感觉10楼效率上会有很大的优势,毕竟是正则替换,而且相对于上面提出的方案少了一个转换的流程.

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

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

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

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

© 2021 V2EX