jQuery序列化将所有空格转换为加号

Posted

技术标签:

【中文标题】jQuery序列化将所有空格转换为加号【英文标题】:jQuery serialize converts all spaces to plus 【发布时间】:2012-06-17 01:02:17 【问题描述】:

目前,无论我在哪里使用序列化,我都必须像这样使用它:

.serialize().replace(/\+/g,'%20');

否则表单数据中的任何空格都将被转换为+。是否有可以将其设为默认值的设置。

【问题讨论】:

【参考方案1】:

为了好玩,这里有一个不使用临时变量的替代方法:

$.fn.serializeAndEncode = function() 
    return $.map(this.serializeArray(), function(val) 
        return [val.name, encodeURIComponent(val.value)].join('=');
    ).join('&');
;

$("#formToSerialize").serializeAndEncode();

【讨论】:

这正是我一个人在做的事情。【参考方案2】:

我不得不做同样的事情。 特里使用 escape() 给出的解决方案不起作用。 = 和 & 正在被编码(我们不希望这样)并且 + 仍然存在。

我所做的是创建自己的序列化函数:

var QueryString = "";
$(selector).each(function(index) 
    if(QueryString != "") QueryString += "&";
    QueryString += $(this).get(0).id + "=" + encodeURIComponent( $(this).val() );
);

【讨论】:

【参考方案3】:

不要相信有默认值,您需要将字符串编码为one of these ways。

虽然您可以创建自己的插件:

jQuery.fn.serializeAndEncode = function() 
    return escape(this.serialize());


$(myForm).serializeAndEncode();

【讨论】:

请不要使用escape。它已 [弃用多年](developer.mozilla.org/en-US/docs/Web/javascript/Guide/… 并应替换为 encodeURIComponent 就像在 Matt Roy 的示例中一样。

以上是关于jQuery序列化将所有空格转换为加号的主要内容,如果未能解决你的问题,请参考以下文章

将jquery序列化转成对象的编码坑

get传输时,会将加号+ 转换为空格

如何使用 jquery 将序列化的字符串转换为数组

js将所有的空格替换成加号(+)

jquery .map() 和 .each()函数结合使用

[踩坑]url传参+变空格