zoukankan      html  css  js  c++  java
  • PHP json编码遇到的问题

    今天遇到了json编码解码之后中文消失的问题,一探究竟,写下这篇文章

    PHP中提供了json_encode  和json_decode 这对函数 将PHP中 值转化成 字符串,但是遇到中文的时候,很容易出现乱码。为什么呢?

    查看PHP手册,发现json只支持utf-8编码,也就是说,中文在进行json_encode时,必须是utf-8编码,json_decode之后也是utf-8编码

    测试程序如下:

    <?php
    $arr = array
           (
              'Name'=>'德玛西亚',
              'Age'=>20
           );
    
    $str = json_encode($arr);
    $str = json_decode($str,TRUE);
    var_dump($str);
    ?>
    

      输出结果如下

    array
      'Name' => null
      'Age' => int 20
    

      可以看到,中文在这个转化过程中丢失了。

    解决这个问题目前我知道两种方法。

    方法1:转码,json_encode之前确保编码是utf-8,而且别忘记 json_decode之后 转回原来的编码

    如下所示:

    <?php
    $arr = array
           (
              'Name'=>iconv('GBK', 'utf-8','德玛西亚'),
              'Age'=>20
           );
    
    $str = json_encode($arr);
    $str = json_decode($str,TRUE);
    $str['Name'] = iconv('UTF-8','GBK',$str['Name']);//别忘了转回来
    
    var_dump($str);
    ?>
    

      运行如下:

    array
      'Name' => string '德玛西亚' (length=8)
      'Age' => int 20
    

      方法二:

    urlencode 和urldecode 来帮忙。其实原理也一样,urlencode会将 串的编码转成utf-8的。

    <?php
    $arr = array
           (
              'Name'=>urlencode('德玛西亚'),
              'Age'=>20
           );
         
    $str = json_encode($arr);
    $str = json_decode($str,TRUE);
    
    $str['Name'] = urldecode($str['Name']);
    
    var_dump($str);
    ?>
    

      运行结果

    array
      'Name' => string '德玛西亚' (length=8)
      'Age' => int 20
    

      

    出了上面两种方法,查看手册可知,在php5.4以后,json_encode可以带一个参数JSON_UNESCAPED_UNICODE来避免这个问题

  • 相关阅读:
    2020.08.28【周报】
    区间合并【排序、栈】
    1042 数字0-9的数量【解题数分DP】
    asp.net数据分页方法
    纯css面板插件,自适应,多样式
    c#winform图表控件使用示例
    使用妹子UI开发的体验分享
    阿里云储存代码整理(由三卷天书整理)
    测试程序的时候用到写参数或者错误日志的几个方法,用来方便发现错误
    fineUI表格控件各属性说明
  • 原文地址:https://www.cnblogs.com/taijun/p/4277252.html
Copyright © 2011-2022 走看看