POST中的JERS / PHP中的&符号

时间:2012-06-03 22:34:24

标签: php jquery json post escaping

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

4 个答案:

答案 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);