V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GPU
V2EX  ›  PHP

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

  •  
  •   GPU · 2014-09-22 19:49:37 +08:00 · 3172 次点击
    这是一个创建于 3721 天前的主题,其中的信息可能已经有所发展或是发生改变。


    代码如上 ,

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


    完整版如下,


    14 条回复    2014-09-24 09:01:03 +08:00
    anewg
        1
    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
        2
    GPU  
    OP
       2014-09-22 20:02:28 +08:00
    @anewg 5.4 是什么意思?
    anewg
        3
    anewg  
       2014-09-22 20:10:07 +08:00
    @GPU php版本5.4
    GPU
        4
    GPU  
    OP
       2014-09-22 20:25:30 +08:00
    @anewg
    https://gist.github.com/anonymous/6d8f133df10314942724

    改了一下, 成这样子 ,输出正常 .不知道有没有可以写得更简化的呢?
    iyaozhen
        5
    iyaozhen  
       2014-09-22 20:38:10 +08:00
    其实没关系的,接收的时候php_decode会把编码还原。
    js我用jquery接收,不用任何处理data.msg直接获取就行。
    一楼说的php5.4之后的JSON_UNESCAPED_UNICODE参数可以直接输出中文。
    zakokun
        6
    zakokun  
       2014-09-22 21:44:08 +08:00 via iPad
    先把中文urlencode一下,处理完以后再转回来urldecode
    anewg
        7
    anewg  
       2014-09-22 22:26:06 +08:00   ❤️ 1
    @GPU 你用5.4以上的php的话这样是最简了
    GPU
        8
    GPU  
    OP
       2014-09-22 22:51:47 +08:00
    @anewg 嗯. 好的.
    bombless
        9
    bombless  
       2014-09-23 07:27:35 +08:00
    我还以为是指读不出来unicode编码呢…
    这种编码算是一种惯例了,不明白为啥要改
    tmkook
        10
    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
        11
    GPU  
    OP
       2014-09-23 11:18:34 +08:00 via iPhone
    @tmkook 看不懂啊
    tmkook
        12
    tmkook  
       2014-09-23 19:52:56 +08:00
    @GPU echo jsonEncode(array("test":"中文")); 生成:{"test":"中文"}
    GPU
        13
    GPU  
    OP
       2014-09-23 23:22:45 +08:00
    @tmkook 这个技能貌似真的很屌
    Actrace
        14
    Actrace  
       2014-09-24 09:01:03 +08:00
    一个比较容易懂的做法是先把数组内的元素都用urlencode处理成不需要转换的字符串,然后生成JSON字符串后再用urldecode来对整个JSON字符串进行解码(中文等将被还原),类似于金属提纯.
    不过看了10楼的做法,感觉10楼效率上会有很大的优势,毕竟是正则替换,而且相对于上面提出的方案少了一个转换的流程.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:25 · PVG 21:25 · LAX 05:25 · JFK 08:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.