jquery的 serialize()方法,可以对表单项进行序列化,这本来是很方便的一个功能;但是实际使用中去发现了如下问题:
例如:
< textarea name="content">abc 123 < / textarea >
那么在执行 serialize()方法后,得到的却是 abc+123 这样的字符串;
即jquery的序列化方法对空格进行了转义,转换成了 + 号。
jquery中serialize方法的部分代码如下所示:
//.................
//.................
return s.join("&").replace(/ /g, "+"); //替换空格为 + 号
测试了一下,serialize()方法对真正的“+”号转义的是 %2B,所以可以放心的对serialize()后的结果进行符号替换
例:
< textarea name="content">abc + 123 + 456 < / textarea >
jquery代码:
var a= $('$frm1').serialize(); //序列化,默认会调用encodeURIComponent()进行编码
alert(a); // content=abc+++123+++456
var b = a.replace(/\+/g," "); // g表示对整个字符串中符合条件的都进行替换
b = decodeURIComponent(b); //对serialize后的内容进行解码
alert(b); // content=abc + 123 + 456
至此,问题解决了。