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


json_decode returning "NULL" for POST data in 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'"}}

我做错了什么?

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

当PHP看到错误时,他们决定删除此功能,但对于WordPress来说,损害已经造成。

WordPress已经接受了早期版本中的神奇报价,并且已经依赖于它提供的半屁股安全性。直到今天,他们继续添加引号,因此您必须显式删除它们。

博士:

在WordPress中,使用stripslashes

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