WordPress中POST数据的json_decode返回“NULL”

4

我将尝试像这样将数组通过JSON.stringify发送到服务器:

JavaScript:

jQuery.ajax({
    type: 'post',
    url: ajax_url, 
    data: {
       'settings' : JSON.stringify([...]),
       'action'   : [...]
       },
    traditional: true,
    success:function(data) {
        alert("SUCCESS");
    }, 
    error: function(errorThrown){
       console.log(errorThrown); 
   } 
});

当我尝试在PHP中使用json_encode时,它返回NULL

PHP

$param = json_decode($test, true);
var_dump($param); //it retuns NULL

JSON.stringify数组的显示形式如下:

{\"uid\":{\"@cdata\":\"6\"},\"board_name\":{\"@cdata\":\"test\"},\"skin\":{\"@cdata\":\"default\"},\"use_comment\":{\"@cdata\":\"\"},\"use_editor\":{\"@cdata\":\"\"},\"created\":{\"@cdata\":\"20160307182421\"}}

我做错了什么?
1个回答

16

从前,PHP决定在GET和POST参数中转义引号,以保护毫无防备的开发人员免受SQL注入漏洞的影响。他们称之为魔法引号(Magic Quotes)

当PHP意识到这种方式的错误时,他们决定移除此功能,但对于WordPress而言伤害已经造成了

WordPress从早期版本开始接受了魔术引号,并且变得依赖于其提供的半吊子安全性。直到今天,他们仍然添加引号,因此您必须显式地将其删除。

简而言之:

在WordPress中,使用stripslashes函数:

$test = stripslashes($_POST['settings']);
json_decode($test, true);

喜欢你用词的方式,哈哈! - Darren
1
经过一小时的混乱和尝试各种方法,最终我找到了这个答案,结束了我的痛苦。 :) 谢谢! - zpert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接