我有一个文本字段,通过JAX和jQuery(用.toJSON
函数包装)通过AJAX和POST请求发送到我的服务器。在PHP方面,我正在做json_decode
。
一切正常但是如果我在其中放入&符号(&),则拆分POST参数,使其在PHP端不完整(至少var_dump($_POST)
正在写出来)。
toJSON和json_decode不应该完成所有工作(转义)吗?我尝试了encodeURIComponent
,& to &
,& 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;
}
}
答案 0 :(得分:3)
&
应编码为%26
。找到这样做的东西。
答案 1 :(得分:2)
答案很简单:使用data
的对象而不是字符串。
E.g。像这样改变你的功能:
return {data: $.toJSON(this.data)};
无论您使用的是POST还是GET,这都适用于任何情况。
答案 2 :(得分:0)
你不需要“数据”的东西,因为你已经在execute()
中拥有了它if(this.requestMethod == 'POST' || this.requestMethod == 'PUT') {
return $.toJSON(this.data);
}
答案 3 :(得分:0)
这很奇怪。 PHP和JS一起工作很多人。不能指望php无法解码js编码的内容。所以我需要一个特殊的功能来处理这个问题。
function damn_ampersand(str){
return str.replace('&', '%26');
}
obj = {"ololo": damn_ampersand("atata & foobar")}
json = JSON.stringify(obj);