PHP POST获取的JSON使用json_decode返回NULL

本文讲述了在PHP中使用json_decode解析从POST获取的JSON数据时遇到的NULL问题。经过排查,发现不是字符集、JSON格式或BOM问题,而是POST数据头部存在额外3个无法显示的字节。解决方案是使用substr函数去除这3个字节,从而成功解析JSON。
摘要由CSDN通过智能技术生成

PHP自5.2版本开始,原生提供了JSON的封包和解包的函数,PHP的JSON操作对JSON的格式要求比较严格。

参考http://www.phpddt.com/php/json_decode-bom.html一文得知:

json_decode要求的字符串比较严格:
(1)使用UTF-8编码
(2)不能在最后元素有逗号
(3)不能使用单引号
(4)不能有\r,\t,如果有请替换

因此,返回NULL的情况还不少,这个得靠大家写代码的时候多多细心。本文要讲的是我从POST获取的JSON格式的字符串,我确保字符串打印出来,看起来没有任何错误,但是json_decode就是返回NULL。这个奇葩的问题,在网上找了很久,有些网友说是字符集的问题,我测试确认后不是,那到底是什么问题呢?

首先,我发送一个webservice请求:

post操作封装函数:

[php]  view plain   copy
  print ?
  1. <span style="font-size:14px;">function do_post_request($url$data$optional_headers = null)  
  2. {  
  3.     $params = array('http' => array(  
  4.             'method' => 'POST',  
  5.             'content' => $data  
  6.     ));  
  7.     if ($optional_headers !== null) {  
  8.         $params['http']['header'] = $optional_headers;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值