Javascript,encodeURI无法编码圆括号“(”

时间:2017-06-08 07:22:06

标签: javascript uri encoder

我的cookie值包含圆括号“例如:demo(1)” 当我尝试使用encodeURI进行编码时,圆括号(未编码为%28,对圆括号等特殊字符进行编码的替代方法

3 个答案:

答案 0 :(得分:3)

encodeURI()对特殊字符进行编码,除了:,/? :@& = + $#。 可以使用encodeURIComponent()对上述字符进行编码。

您可以编写自定义方法进行编码(至%28。

示例:

var uri = "my test.asp?(name";
var res = encodeURI(uri);
res.replace("(", "%28");

注意: encodeURI()不会编码:〜!@#& *()=:/ ,;?+'

encodeURIComponent()不会编码:〜!*()'

答案 1 :(得分:1)

encodeURI仅对保留字符进行编码,因此不应期望此函数对括号进行编码。

您可以编写自己的函数来对字符串中的所有字符进行编码,或者只创建要编码的自定义字符列表。

Fiddle

function superEncodeURI(url) {

  var encodedStr = '', encodeChars = ["(", ")"];
  url = encodeURI(url);

  for(var i = 0, len = url.length; i < len; i++) {
    if (encodeChars.indexOf(url[i]) >= 0) {
        var hex = parseInt(url.charCodeAt(i)).toString(16);
        encodedStr += '%' + hex;
    }
    else {
        encodedStr += url[i];
    }
  }

  return encodedStr;
}

答案 2 :(得分:1)

要将uri组件编码为符合RFC 3986的标准-编码字符!'()*-您可以使用:

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

取自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

的“示例”部分之前

有关参考,请参见:https://tools.ietf.org/html/rfc3986