POST中JSON/PHP中的符号

POST中JSON/PHP中的符号,php,jquery,json,post,escaping,Php,Jquery,Json,Post,Escaping,我有一个文本字段,它通过JSON和jQuery(用.toJSON函数包装)通过AJAX和POST请求发送到我的服务器。在PHP方面,我正在进行json\u解码 一切都正常,但如果我在它里面放了符号(&),它会分割POST参数,因此它在PHP端是不完整的(至少是var\u dump($\u POST)正在写的内容) toJSON和json_解码不应该完成所有的工作(转义)吗?我尝试了encodeURIComponent,&to&,&到\u0026,它不工作 我做错了什么 AJAX调用 fun

我有一个文本字段,它通过JSON和jQuery(用
.toJSON
函数包装)通过AJAX和POST请求发送到我的服务器。在PHP方面,我正在进行
json\u解码

一切都正常,但如果我在它里面放了符号(&),它会分割POST参数,因此它在PHP端是不完整的(至少是
var\u dump($\u POST)
正在写的内容)

toJSON和json_解码不应该完成所有的工作(转义)吗?我尝试了
encodeURIComponent
&to&
&到\u0026
,它不工作

我做错了什么

AJAX调用

function execute() {
    this.setupUrl();
    return $.ajax({
        type: this.requestMethod,
        data: this.getDataParams(),
        url: this.url
    });
}

function getDataParams() {
    if(this.data != undefined) {
        if(this.requestMethod == 'POST' || this.requestMethod == 'PUT') {
            return "data=" + $.toJSON(this.data);
        } else if(this.requestMethod == 'GET') {
            return this.data;
        }
    } else {
        return null;
    }
}

&
应编码为
%26
。找到这样做的东西。

答案很简单:使用对象来表示数据,而不是字符串

例如,像这样更改您的功能:

return {data: $.toJSON(this.data)};
无论您使用的是POST还是GET,这在任何情况下都会起作用。

您不需要“数据”这个东西,因为您在execute()中已经有了它


这是威德。PHP和JS一起工作的人很多。没想到php无法解码js编码的内容。所以我需要一个特殊的函数来处理这个问题

function damn_ampersand(str){
    return str.replace('&', '%26');
}
obj = {"ololo": damn_ampersand("atata & foobar")}
json = JSON.stringify(obj);

如果您向我们展示您的代码,那会有所帮助。将
getDataParams()
更改为
函数getDataParams(){return(this.data==undefined)?null:'data='+encodeURIComponent($.toJSON(this.data));}
应该可以工作了……字符串连接是万恶之源,再次感谢。将在几分钟内接受。这将不起作用,因为它将有:{data:{data:json}。看我的回答,这取决于他想要什么。但是,您应该考虑发送纯JSON有效载荷,即<代码>数据:JSON.StrugI化(这个数据),并使用<代码> JSONY-DECODE(FielyGETIX内容)php://input)
在PHP代码中。
function damn_ampersand(str){
    return str.replace('&', '%26');
}
obj = {"ololo": damn_ampersand("atata & foobar")}
json = JSON.stringify(obj);