Press "Enter" to skip to content

让Json更懂中文(JSON_UNESCAPED_UNICODE)

我们知道, 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似"\u***"的格式, 还会在一定程度上增加传输的数据量.

<?php
echo json_encode("中文");
//"\u4e2d\u6587"

这就让我们这些在天朝做开发的同学, 很是头疼, 有的时候还不得不自己写json_encode.
而在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.
看下面的例子:

<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE);
//"中文"

怎么样, 是不是让大家很开心的改动? 呵呵, 当然, Json在5.4还加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等选项, 如果有兴趣, 大家可以参看: json_encode
不过, 还是要提醒下: PHP 5.4还处于开发阶段, 在最终release之前, 任何新特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
谢谢
更多更新信息, 请关注: Changelog

44 Comments

  1. 飘
    July 18, 2020

    现在遇到个问题,用户昵称里有emoji表情,接口通过php输出json的时候,进行了json_encode,这样表情的unicode被转换成了html实体,有没有办法让它转换的时候跟中文这种似的,不转换呢?找了半天json_encode里相关设置的参数,没找到能干这个事的。

  2. wwphe
    wwphe December 6, 2019

    非常感谢,解决困扰几天的问题。

  3. […] 事后突然意识到公司平台的很多接口返回的json数据中文都是没有编码的,于是在进一步的了解中看到了鸟哥的这篇文章《让Json更懂中文(JSON_UNESCAPED_UNICODE)》,文章开头的这句话让我认识到了自己的想当然。 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”u***”的格式, 还会在一定程度上增加传输的数据量. […]

  4. wxg
    wxg March 28, 2018

    super brilliant

  5. infusionkendal.com
    infusionkendal.com July 6, 2016

    There’s certainly a lot to find out about this topic. I really like all the points you’ve made.

  6. JackVan
    JackVan May 26, 2016

    JSON_UNESCAPED_UNICODE 没有能够把一些特殊符号转义 导致无法decode

  7. Every weekend i used to go to see this site, as i wish for enjoyment, as this this
    web site conations genuinely nice funny material too.

  8. lorretta
    lorretta February 15, 2016

    I’ll immediately seize your rss as I can not to find your e-mail subscription hyperlink or e-newsletter service.
    Do you’ve any? Kindly allow me recognise in order that I may just subscribe.
    Thanks.

  9. Trail
    Trail February 13, 2014

    问一下,php 5.2的要实现这个有什么别的方法吗?

    • 管鹏会
      管鹏会 December 3, 2018

      urlencode 来实现

  10. yangball
    yangball May 18, 2012

    json_encode有第二个参数,
    相对应的 json_decode 呢??
    第二个参数是否解成object ? array 的。。
    那新增加的呢,这个是乍样处理。

  11. stevelu
    stevelu April 20, 2012

    现在还不没升级5.4,请问有没有现成的支持中文的json_encode嘛?

  12. liuxd
    liuxd December 12, 2011

    啊哈,这个改动很棒啊!话说5.4啥时候发布啊?有比较准确的时间表吗?

  13. zeg
    zeg December 8, 2011

    哦哦哦哦哦哦哦!终于有人改这个了!
    我一直想发信和你说这事呢~

  14. kevin
    kevin December 8, 2011

    直接输出UTF8的汉字字符串,并不符合JSON标准,这个怎么考虑的?
    JSON.ORG的字符串说明:
    string
    “”
    ” chars ”
    chars
    char
    char chars
    char
    any-Unicode-character-
    except-“-or-\-or-
    control-character
    \”
    \\
    \/
    \b
    \f
    \n
    \r
    \t
    \u four-hex-digits
    @see: http://json.org/string.gif

  15. kangzj
    kangzj December 7, 2011

    您好,如果想让把php 5.3的json.so升级到这个版本,应该如何操作呢。我用PEAR安装了json 1.2.1,发现并不支持此项功能,可以加我gtalk吗?就是我的email地址,谢谢!

  16. Shallker
    Shallker December 2, 2011

    虽然在客户端console.log直接打印出的是’类似”\u***”的格式’, 但是在用jQuery接收时先声明数据格式是json, 那么打出来的就还是正确的中文, 不是\u*的格式了. 推论出是不是在客户端需要先对json数据进行下解析.

  17. Anonymous
    Anonymous November 16, 2011

    希望PHP同时实现64位和32位整数的支持,及无符号整数,这样也能解决ip2long的问题

  18. 大草原
    大草原 November 16, 2011

    istrone | 11 Oct 2011 11:01
    对了,PHP好像还有一个bug,就是ip2long的返回值有时候会出现负数。
    sprintf(‘%u’, ip2long($ip));

  19. anthony
    anthony October 31, 2011

    PHP 5.4是否真的对性能,内存使用有很大改善

  20. 朱宝祥
    朱宝祥 October 31, 2011

    正在学习json中,感觉你什么都懂。。

  21. 转烛
    转烛 October 20, 2011

    昨天还正在为这个苦恼呢,没想到今天就看到这个内容。

  22. 小桑
    小桑 October 19, 2011

    哈哈,太爽了。

  23. wclssdn
    wclssdn October 19, 2011

    – – 鸟哥能加个插件不.. 当我敲错验证码的时候, 把评论保留… 白打那么多字了..

    • 雪候鸟
      雪候鸟 October 19, 2011

      @wclssdn 后退, 内容还在.

  24. rainkid
    rainkid October 14, 2011

    使用下面命令:
    php -r “var_dump(json_encode(‘1’));”
    输出是:
    string(3) “”1″”
    为什么会有两层引号?

  25. dvaknheo
    dvaknheo October 13, 2011

    追加 parse_url 的逆函数吧。
    很讨厌每次都要去 评论里 抄 glue_url

  26. 小鑫
    小鑫 October 12, 2011

    这个属性比较好,期待中呀

  27. darasion
    darasion October 11, 2011

    我不觉得这个特性好。虽然一时看着爽,接踵而来的编码问题将会产生广泛而深入的影响。

  28. jueying
    jueying October 11, 2011

    不错,很实用!持续关注中!

  29. istrone
    istrone October 11, 2011

    对了,PHP好像还有一个bug,就是ip2long的返回值有时候会出现负数。

  30. jeffliu
    jeffliu October 11, 2011

    超爱这个。
    json_encode编码中文非常的恶心。
    json_encode也会把大值int使用科学计数法表示 恶心死。

  31. jackywdx
    jackywdx October 10, 2011

    喔,这个特性很爽啊。

Comments are closed.