JSON

php中GBK/GB2312页面使用json_decode()中文丢失了解决方法

字号+ 作者:H5之家 来源:H5之家 2017-11-16 08:08 我要评论( )

在php中json_decode()函数可以把数组与json格式的数据相互转换,但json_decode()函数只支持UTF-8与ASCII编码,如果是gkb就会出问题,下面我们来看看问题分析与解

php中GBK/GB2312页面使用json_decode()中文丢失了解决方法

好像用json_decode()将数组/对象 序列化为JSON字符串的时候基本上只支持 UTF-8/ASCII编码。而我们有的站采用了GBK/GB2312编码,这个时候,直接使用json_encode/json_decode的时候就可能会出问题了。

 代码如下

<?php
$json = '{"a":"中国人人"}';
var_dump(json_decode($json));
?>

结果

{"text":null,"status":1}

比如转含有中文的字符字变成空(null),但有时候我们又必须得用gb编码而又要用到json_decode()转换的时候呢?什么办呢?自己昨晚写了一个不用数据库的一个添加音乐的小后台。也就是用php添加音乐,然后生成xml菜单。不用数据库那也得用一个方式来保存数据了。保存成文本的数据再可以直接拿出来用的,我想是把数组json_decode()用它转成json格式,用的时候再拿出来用它json_encode转回数组就可以了(可能最近弄js被json影响了,好像把数组序列化还有更好的方法,比如用:serialize()和unserialize()),呵呵,转正题。既然json_decode()在gb编码上转不了中文,那么我们可以先把中文转成英文编码的形式。那可以使用这个urlencode()转一下编码,再做json_decode()转换。使用的时候,再用urldecode()转成中文就可以了

 代码如下

/*
    字符串GBK转码为UTF-8,数字转换为数字。
*/
function ct2($s){
    if(is_numeric($s)) {
        return intval($s);
    } else {
        return iconv("GBK","UTF-8",$s);
    }
}
/*
    批量处理gbk->utf-8
*/
function icon_to_utf8($s) {
  if(is_array($s)) {
    foreach($s as $key => $val) {
      $s[$key] = icon_to_utf8($val);
    }
  } else {
      $s = ct2($s);
  }
  return $s;
}
echo json_encode(icon_to_utf8("厦门"));

相关文章

  • hibernate存取json数据的代码分析11-04
  • 11-01
  • Android Studio获取网络JSON数据并处理的方法10-17
  • 快速解决百度编译器json报错的问题08-15
  • PHP+JQUERY操作JSON实例07-21
  • golang实现sql结果集以json格式输出的方法07-11
  • 文章评论

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • json() 中文乱码

      json() 中文乱码

      2017-11-08 16:03

    • PHP实现json_decode不转义中文的方法,

      PHP实现json_decode不转义中文的方法,

      2017-11-08 12:00

    • PowerShell中的特殊变量$null介绍和创建多行注释小技巧 / jeepyu

      PowerShell中的特殊变量$null介绍和创建多行注释小技巧 / jeepyu

      2017-10-24 18:17

    • JSON创建键值对(key是中文或者数字)方式详解

      JSON创建键值对(key是中文或者数字)方式详解

      2017-10-05 18:00

    网友点评