0

我使用 encodeURIComponent() 方法在 javascript 中对 url 进行编码..通过使用该方法,一些字符也没有被编码..任何人都可以建议一种方法或代码来编码 Url 中的每个字符,包括
- _ 。!~ * ' ( )。谢谢。

4

2 回答 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 回答