我试图像这样向服务器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);