与号在 JSON/PHP 中的 POST 中


Ampersand in JSON/PHP in POST

我有一个文本字段,它通过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);