文档章节

关于json_decode乱码及NULL的解决方法

笨小熊
 笨小熊
发布于 2015/10/13 00:15
字数 529
阅读 685
收藏 2

写接口的同学应该会经常遇到数据格式的转换,这时候必不可少的两个函数就是json_encode()和json_decode()。

这两个函数使用的时候有很多的主要事项,在这里我来说一下json_decode()。

json_decode(): 对JSON 格式的字符串进行解码,接受一个JSON 格式的字符串并且把它转换为 PHP变量

(1)将数据转换成数组之后,打印会显示NUll:

原因之一json_decode只支持utf-8.

iconv('gbk','utf-8', $result_string);用iconv函数将写入数据的gbk编码格式转换为要输出的utf-8编码格式,若原本的数据是utf-8格式,则不用此步骤,否则还会出现乱码

注意:使用iconv函数并不是php自带的,需要可以修改php.ini文件,将extension=php_iconv.dll前的";"去掉,同时你要copy你的原php安装文件下的iconv.dll到你的winnt/system32下(如果你的dll指向的是这个目录)。(有可能是php的安装文件???)

原因之二:json字符串必须以双引号包含

str_replace("'", '"', $result_string);//将json数据中的单引替换成双引

原因之三:不能有多余的逗号如:[1,2,]

用正则替换掉,preg_replace('/,\s*([\]}])/m', '$1', $result_string);

(2)将数据转换成数组或者在转换成json格式数据之后,会显示乱码:

这时候要用到urlencode()和urldecode()

以下是我的代码,经试验有效

if(file_exists($result['save_path'])){

  $contents=file_get_contents($result['save_path']);//将一个文件的内容写入,文件是utf-8格式,里面是json格式的数据

  //$getcontent = iconv("gbk", "utf-8//ignore",$contents);//若文件原本是utf-8格式,无需转换

  $getcontent=str_replace("'", '"',$contents);//将单引替换成双引

  preg_replace('/,\s*([\]}])/m', '$1', $getcontent);//去掉多余的逗号

  $new_array=array();

  $new_array=json_decode($getcontent,true);

  $res=array();

  foreach ($new_array as $key=>$val){

   foreach ($new_array[$key]['items'] as $k=>$v){

    if($k<$row){

     $res[$k]['position']=$v['position'];

     $res[$k]['distance']=$v['distance'];

     $res[$k]['title']=urlencode($v['title']);

     $res[$k['vicinity']=urlencode($v['vicinity']);

    }

   }

  }

 if($res){

 $new_res['items']=$res;

 }else{

 $new_res['items']="";

 }

 echo urldecode(json_encode($new_res));

}

© 著作权归作者所有

共有 人打赏支持
笨小熊
粉丝 13
博文 151
码字总数 64568
作品 0
深圳
高级程序员
私信 提问
jquery的ajax()函数传值中文乱码解决方法介绍

jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({  dataType : ‘json',type : ‘POST',url :‘http://localhost/test/test.do',data : {id: 1, typ...

mdoo
2015/10/07
217
1
jquery的ajax()函数传值中文乱码的解决方案

$.ajax({     dataType : ‘json’,type : ‘POST’,url : ‘http://localhost/test/test.do’,data : {id: 1, type: ‘商品’} ,success : function(data){ ……} } ); 问题:   提交后......

梁荣良
2016/05/13
348
0
JQuery中Ajax的Post提交中文乱码的解决方案(转)

引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何解决呢? 问题的引入: var regid = $('#oregion').combobox('getValue'); //var sname = $('#sname')....

Atom_me
2015/06/02
217
2
PHP json_decode返回NULL原因及解决方法

在工作中,经常使用jsonencode和jsondecode来序列化数组成字符串(从而方便在不同页面传递数组变量)。 但是今天发现 json_decode返回NULL,分析代码后发现数组元素中含有[符号,而[符号在j...

hustnzj
2016/08/19
25
0
django乱码问题

折腾了两天,终于解决了。返回json中文乱码 在网上那个找了很多方法,试了都比行,无意间看了一个方法。ok 1.就是mysql数据库本身编码的问题。有两个设置: 在mysql命令行环境输入:show va...

刘新全
2015/12/31
410
0

没有更多内容

加载失败,请刷新页面

加载更多

MariaDB 服务器在 MySQL Workbench 备份数据的时候出错如何解决

服务器是运行在 MariaDB 10.2 上面的,在使用 MySQL Workbench 出现错误: mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"'......

honeymose
43分钟前
0
0
apache顶级项目(二) - B~C

apache顶级项目(二) - B~C https://www.apache.org/ Bahir Apache Bahir provides extensions to multiple distributed analytic platforms, extending their reach with a diversity of s......

晨猫
今天
3
0
day152-2018-11-19-英语流利阅读

“超级食物”竟然是营销噱头? Daniel 2018-11-19 1.今日导读 近几年来,超级食物 superfoods 开始逐渐走红。不难发现,越来越多的轻食餐厅也在不断推出以超级食物为主打食材的健康料理,像是...

飞鱼说编程
今天
10
0
SpringBoot源码:启动过程分析(二)

接着上篇继续分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 一样的,我们先把时序图贴上来,方便理解: 二.源码分析 回顾一下,前面我们分析到了下...

Jacktanger
昨天
3
0
Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部