POST中JSON/PHP中的符号
我有一个文本字段,它通过JSON和jQuery(用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
.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);