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