我使用 encodeURIComponent() 方法在 javascript 中对 url 进行编码..通过使用该方法,一些字符也没有被编码..任何人都可以建议一种方法或代码来编码 Url 中的每个字符,包括
- _ 。!~ * ' ( )。谢谢。
问问题
53 次
2 回答
1
您可以编写自己的编码和解码函数:
function encodeString(s) {
var result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push('%' + s.charCodeAt(i));
}
return result.join('');
}
function decodeString(s) {
s = s.split('%');
result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push(String.fromCharCode(s[i]));
}
return result.join('');
}
var s = "- _ . ! ~ * ' ( )";
alert(encodeString(s)); // %45%32%95%32%46%32%33%32%126%32%42%32%39%32%40%32%41
alert(decodeString(encodeString(s))); // - _ . ! ~ * ' ( )
编辑
以上似乎以 10 为基数进行编码,而 encodeURIComponent 似乎以 16 为基数进行编码,因此这是使用以 16 为基数(十六进制)的替代方法:
function encodeString(s) {
var result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push('%' + s.charCodeAt(i).toString(16));
}
return result.join('');
}
function decodeString(s) {
s = s.split('%');
result = [];
for (var i=0, iLen=s.length; i<iLen; i++) {
result.push(String.fromCharCode(parseInt(s[i], 16)));
}
return result.join('');
}
alert(encodeString(s)); // %2d%20%5f%20%2e%20%21%20%7e%20%2a%20%27%20%28%20%29
第一个在 IE 8 中没有正确解码,我没有时间修复它并且现在没有可用的 IE。您可能需要进行功能测试以查看用于解码的基数。
于 2013-03-15T06:12:54.087 回答
0
该encodeURIComponent
方法只能用于 URL 的“片段”(组件)。当您从用户提供或计算的片段构建 URL 时,它用于将查询字符串或路径放在一起。
真的不可能有一个通用的“正确编码我的 URL”方法,因为它不能告诉你对 URL 的哪些部分进行编码和不想编码。相反,在将它们添加到最终字符串之前encodeURIComponent()
,请在您组合在一起的 URL 片段上使用它们。
于 2013-03-15T05:42:15.570 回答