php json encode 中文部分被替换为 unicode 码 ,应该怎么用最简单的方法解决? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
GPU
V2EX    PHP

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

  •  
  •   GPU Sep 22, 2014 3544 views
    This topic created in 4240 days ago, the information mentioned may be changed or developed.


    代码如上 ,

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


    完整版如下,


    14 replies    2014-09-24 09:01:03 +08:00
    anewg
        1
    anewg  
       Sep 22, 2014
    5.4 之后 echo json_encode("中文", JSON_UNESCAPED_UNICODE);

    5.4 之前 echo json_encode(urlencode("中文"));接收端 json_decode 后再 urldecode
    GPU
        2
    GPU  
    OP
       Sep 22, 2014
    @anewg 5.4 是什么意思?
        3
    anewg  
       Sep 22, 2014
    @GPU php版本5.4
    GPU
        4
    GPU  
    OP
       Sep 22, 2014
    @anewg
    https://gist.github.com/anonymous/6d8f133df10314942724

    改了一下, 成这样子 ,输出正常 .不知道有没有可以写得更简化的呢?
    iyaozhen
        5
    iyaozhen  
       Sep 22, 2014
    其实没关系的,接收的时候php_decode会把编码还原。
    js我用jquery接收,不用任何处理data.msg直接获取就行。
    一楼说的php5.4之后的JSON_UNESCAPED_UNICODE参数可以直接输出中文。
    zakokun
        6
    zakokun  
       Sep 22, 2014 via iPad
    先把中文urlencode一下,处理完以后再转回来urldecode
    anewg
        7
    anewg  
       Sep 22, 2014   1
    @GPU 你用5.4以上的php的话这样是最简了
    GPU
        8
    GPU  
    OP
       Sep 22, 2014
    @anewg 嗯. 好的.
    bombless
        9
    bombless  
       Sep 23, 2014
    我还以为是指读不出来unicode编码呢…
    这种编码算是一种惯例了,不明白为啥要改
    tmkook
        10
    tmkook  
    PRO
       Sep 23, 2014
    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
       Sep 23, 2014 via iPhone
    @tmkook 看不懂啊
    tmkook
        12
    tmkook  
    PRO
       Sep 23, 2014
    @GPU echo jsonEncode(array("test":"中文")); 生成:{"test":"中文"}
    GPU
        13
    GPU  
    OP
       Sep 23, 2014
    @tmkook 这个技能貌似真的很
    Actrace
        14
    Actrace  
       Sep 24, 2014
    一个比较容易懂的做法是先把数组内的元素都用urlencode处理成不需要转换的字符串,然后生成JSON字符串后再用urldecode来对整个JSON字符串进行解码(中文等将被还原),类似于金属提纯.
    不过看了10楼的做法,感觉10楼效率上会有很大的优势,毕竟是正则替换,而且相对于上面提出的方案少了一个转换的流程.
    About     Help     Advertise     Blog     API     FAQ     Solana     743 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 21:23 PVG 05:23 LAX 14:23 JFK 17:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86