json_decode解析不了返回的数据

php中文网
发布: 2016-06-23 09:09:36
原创
1203人浏览过

服务器端:

function order_kb(){    $orderaddress[0]['odd']='560860393435';    $this->ajaxreturn($orderaddress,'json');}
登录后复制


客户端:
<?php$post_data = array () ;$url = 'http://www.danhaoxia.com/index.php?m=user&a=order_kb' ;$o = "" ;foreach ($post_data as $k=>$v){    $o.="$k=".urlencode($v)."&";}$data=substr($o,0,-1);$ch = curl_init();curl_setopt($ch, curlopt_post, 1);curl_setopt($ch, curlopt_returntransfer, 1);curl_setopt($ch, curlopt_header,0);curl_setopt($ch, curlopt_url,$url);curl_setopt($ch, curlopt_postfields, $data);$result = curl_exec($ch);curl_close($curl);print_r('client:'.$result.'|');print_r('decode:'.json_decode($result,true).'|');?>
登录后复制

有获取到数据[{"odd":"560860393435"}]  但是解析不了

LimeSurvey问卷调查管理系统
LimeSurvey问卷调查管理系统

具有问卷的设计、修改、发布、回收和统计等多项功能,集成了调查程序开发、调查问卷的发布以及数据收集等功能,使用它,用户不必了解这些功能的编程细节。

LimeSurvey问卷调查管理系统 120
查看详情 LimeSurvey问卷调查管理系统


回复讨论(解决方案)

你打印的时候把字符串和数组拼起来不会报错吗??

服务器端:

function order_kb(){    $orderaddress[0]['odd']='560860393435';    $this->ajaxreturn($orderaddress,'json');}
登录后复制


客户端:
<?php$post_data = array () ;$url = 'http://www.danhaoxia.com/index.php?m=user&a=order_kb' ;$o = "" ;foreach ($post_data as $k=>$v){    $o.="$k=".urlencode($v)."&";}$data=substr($o,0,-1);$ch = curl_init();curl_setopt($ch, curlopt_post, 1);curl_setopt($ch, curlopt_returntransfer, 1);curl_setopt($ch, curlopt_header,0);curl_setopt($ch, curlopt_url,$url);curl_setopt($ch, curlopt_postfields, $data);$result = curl_exec($ch);curl_close($curl);print_r('client:'.$result.'|');print_r('decode:'.json_decode($result,true).'|');?>
登录后复制

有获取到数据[{"odd":"560860393435"}]  但是解析不了

不会

print_r('Client:'.$result.'|'); 得到
Client:锘縖{"odd":"560860393435"}]|
显然是有 BOM 头
所以需要这样
print_r(json_decode(substr($result, 3), true));

Array
(
    [0] => Array
        (
            [odd] => 560860393435
        )

)

你打印的时候把字符串和数组拼起来不会报错吗??

不会,字符串去掉也是一样的结果

print_r('Client:'.$result.'|'); 得到
Client:锘縖{"odd":"560860393435"}]|
显然是有 BOM 头
所以需要这样
print_r(json_decode(substr($result, 3), true));

Array
(
    [0] => Array
        (
            [odd] => 560860393435
        )

)

能否在服务器的order_kb()函数过滤?

你把程序文件另存为  utf-8无bom 格式

你把程序文件另存为  utf-8无bom 格式

文件用记事本看了下,都是UTF-8格式的

如果你是在用 记事本 编辑 php 文件的话,那么请在保存时选则择 ANSI
通常程序中是没有 中文字符串常量 的,所以不选 utf-8 与整体无碍

或许有人会告诉你加个 ob_clean();
但这种反人类的做法实在是不可取

如果你是在用 记事本 编辑 php 文件的话,那么请在保存时选则择 ANSI
通常程序中是没有 中文字符串常量 的,所以不选 utf-8 与整体无碍

或许有人会告诉你加个 ob_clean();
但这种反人类的做法实在是不可取

我是用Dreamware编辑php文件的,用记事本去看文件编码都是utf-8的。php的ajaxReturn是否是默认加BOM头的,如何不让他自动加

BOM 头是你的编辑器加入的(因为操作系统默认的字符集是 GBK)用以指示文档的字符集

BOM 头是你的编辑器加入的(因为操作系统默认的字符集是 GBK)用以指示文档的字符集

除了ajaxReturn,有没有别的方法可以把值返回回去的?我看别人取接口值直接json_decode就可以,不用去处理BOM头

人家的程序文件没有 BOM 头,自然就不需要处理!
而你偏要用初级的编辑器编辑 php 文件,还坚持用 utf-8 编码,那自然需要你自己处理 BOM 头了

人家的程序文件没有 BOM 头,自然就不需要处理!
而你偏要用初级的编辑器编辑 php 文件,还坚持用 utf-8 编码,那自然需要你自己处理 BOM 头了

要用php的编辑器新建文件把内容黏贴过去吗

人家的程序文件没有 BOM 头,自然就不需要处理!
而你偏要用初级的编辑器编辑 php 文件,还坚持用 utf-8 编码,那自然需要你自己处理 BOM 头了


这里面没BOM头也不行

人家的程序文件没有 BOM 头,自然就不需要处理!
而你偏要用初级的编辑器编辑 php 文件,还坚持用 utf-8 编码,那自然需要你自己处理 BOM 头了


加个ob_end_clean();就可以了
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号