我正在使用这个jQuery urlencode和urldecode插件 - 非常简单易用,但它不会以原始形式从字符串中删除+
。主页上的一条评论提示补丁,但我不知道如何实现它。任何人都可以帮助我吗?
网页:http://www.digitalbart.com/jquery-and-urlencode/
//URL Encode/Decode
$.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();
var r=/(^[a-zA-Z0-9_.]*)/;
while(x<c.length){var m=r.exec(c.substr(x));
if(m!=null && m.length>1 && m[1]!=''){o+=m[1];x+=m[1].length;
}else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16);
o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;},
URLDecode:function(s){var o=s;var binVal,t;var r=/(%[^%]{2})/;
while((m=r.exec(o))!=null && m.length>1 && m[1]!=''){
b=parseInt(m[1].substr(1),16);
t=String.fromCharCode(b);o=o.replace(m[1],t);}return o;}
});
拟议的补丁:
function dummy_url_decode(url) {
// fixed -- + char decodes to space char
var o = url;
var binVal, t, b;
var r = /(%[^%]{2}|\+)/;
while ((m = r.exec(o)) != null && m.length > 1 && m[1] != '') {
if (m[1] == '+') {
t = ' ';
} else {
b = parseInt(m[1].substr(1), 16);
t = String.fromCharCode(b);
}
o = o.replace(m[1], t);
}
return o;
}
谢谢!
答案 0 :(得分:34)
根本不要使用该插件;这是毫无意义。 Javascript已经支持使用内置函数(encodeURIComponent
和decodeURIComponent
)进行URL编码和解码。使用该机制将空格编码为%20。
如果你的服务器端代码在那里添加了空格的加号,你可以摆脱那些简单的正则表达式替换,因为不会有任何“真正的”加号需要担心(它们被编码为% 2B):
var decoded = decodeURIComponent(encoded.replace(/\+/g, '%20'));