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

35 Comments

  1. wxg
    wxg 2018-03-28

    super brilliant

  2. infusionkendal.com
    infusionkendal.com 2016-07-06

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

  3. JackVan
    JackVan 2016-05-26

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

  4. 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.

  5. lorretta
    lorretta 2016-02-15

    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.

  6. Trail
    Trail 2014-02-13

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

  7. yangball
    yangball 2012-05-18

    json_encode有第二个参数,
    相对应的 json_decode 呢??
    第二个参数是否解成object ? array 的。。

    那新增加的呢,这个是乍样处理。

  8. stevelu
    stevelu 2012-04-20

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

  9. liuxd
    liuxd 2011-12-12

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

  10. zeg
    zeg 2011-12-08

    哦哦哦哦哦哦哦!终于有人改这个了!

    我一直想发信和你说这事呢~

  11. kevin
    kevin 2011-12-08

    直接输出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

  12. kangzj
    kangzj 2011-12-07

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

  13. Shallker
    Shallker 2011-12-02

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

  14. Anonymous
    Anonymous 2011-11-16

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

  15. 大草原
    大草原 2011-11-16

    istrone | 11 Oct 2011 11:01
    对了,PHP好像还有一个bug,就是ip2long的返回值有时候会出现负数。

    sprintf(‘%u’, ip2long($ip));

  16. anthony
    anthony 2011-10-31

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

  17. 朱宝祥
    朱宝祥 2011-10-31

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

  18. 转烛
    转烛 2011-10-20

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

  19. wclssdn
    wclssdn 2011-10-19

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

  20. rainkid
    rainkid 2011-10-14

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

  21. dvaknheo
    dvaknheo 2011-10-13

    追加 parse_url 的逆函数吧。

    很讨厌每次都要去 评论里 抄 glue_url

  22. 小鑫
    小鑫 2011-10-12

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

  23. darasion
    darasion 2011-10-11

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

  24. jueying
    jueying 2011-10-11

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

  25. istrone
    istrone 2011-10-11

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

  26. jeffliu
    jeffliu 2011-10-11

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

  27. jackywdx
    jackywdx 2011-10-10

    喔,这个特性很爽啊。

Leave a Reply

Your email address will not be published. Required fields are marked *