我的cookie值包含圆括号“例如:demo(1)” 当我尝试使用encodeURI进行编码时,圆括号(未编码为%28,对圆括号等特殊字符进行编码的替代方法
答案 0 :(得分:3)
encodeURI()
对特殊字符进行编码,除了:,/? :@& = + $#。
可以使用encodeURIComponent()
对上述字符进行编码。
您可以编写自定义方法进行编码(至%28。
示例:
var uri = "my test.asp?(name";
var res = encodeURI(uri);
res.replace("(", "%28");
注意:
encodeURI()
不会编码:〜!@#& *()=:/ ,;?+'
encodeURIComponent()
不会编码:〜!*()'
答案 1 :(得分:1)
encodeURI
仅对保留字符进行编码,因此不应期望此函数对括号进行编码。
您可以编写自己的函数来对字符串中的所有字符进行编码,或者只创建要编码的自定义字符列表。
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