json_decode为WordPress

时间:2016-03-21 01:06:02

标签: php ajax wordpress

我尝试将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 个答案:

答案 0 :(得分:9)

曾几何时,PHP决定在GET和POST参数中转义引号是一个好主意,以保护不知情的开发人员免受SQL注入漏洞的影响。他们称这种巫术为"Magic Quotes"

当PHP看到错误时,他们决定删除此功能,但对于WordPress the damage was already done

WordPress已经接受了早期版本中的魔术引用,并且已经依赖于它提供的半安全性。到目前为止,他们会继续添加引号,以便您必须明确删除它们。

TL; DR:

在WordPress中,使用stripslashes

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