javascript - jQuery urlencode/decode 补丁帮助

标签 javascript jquery urlencode urldecode

我正在使用这个 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;
}

谢谢!

最佳答案

根本不要使用那个插件;没有用。 Javascript 已经通过内置函数(encodeURIComponentdecodeURIComponent)支持 URL 编码和解码。使用该机制将空格编码为 %20。

如果您的服务器端代码在其中放置了空格的加号,您可以通过简单的正则表达式替换来摆脱那些,因为不会有任何“真正的”加号需要担心(它们被编码为 % 2B):

var decoded = decodeURIComponent(encoded.replace(/\+/g, '%20'));

关于javascript - jQuery urlencode/decode 补丁帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540337/

相关文章:

php - 为什么我的电子邮件地址字段没有像我希望的那样显示在我的单选按钮右侧?

javascript - 将数组的长度设置为 0 似乎不会清空数组

jQuery - 如果为空,则将输入值设置为模糊时的先前值

java - Apache commons 的 URLCodec 解码数据并将字符替换为问号 (?)

javascript - 为什么提交到Spring Controller 后java无法识别html文本?

javascript - 在 C++ 中对扩展 ASCII std::string 进行 URL 编码

javascript - 如何对 HTML 代码的输出进行单元测试

javascript - 在播放 vimeo 嵌入时将类添加到 div

javascript - vue-cli上传服务器后,请求服务器图片路径为more/dist/

javascript - 下划线模板不在主干中呈现