在JavaScript中,encodeURI
和 encodeURIComponent
函数用于对URI(统一资源标识符)进行编码,以确保它们在网络传输中不会引起歧义或错误。然而,这两个函数都有一些字符不会被转码,这些字符被称为“保留字符”。
保留字符:在URI中具有特殊意义的字符,如冒号、斜杠、问号等。这些字符在URI中有特定的用途,因此在编码时通常不会被转码。
以下是 encodeURI
和 encodeURIComponent
不会转码的字符:
encodeURI
-_.!~*'()
; , / ? : @ & = + $ #
encodeURIComponent
-_.!~*'()
; , / ? : @ & = + $ #
encodeURIComponent
可以确保参数值中的特殊字符被正确编码,但保留字符保持不变。encodeURI
可以编码整个URI,但保留字符保持不变,适用于需要保持URI结构的场景。// 使用 encodeURI
let uri = "https://example.com/search?q=JavaScript教程";
let encodedURI = encodeURI(uri);
console.log(encodedURI); // 输出: https://example.com/search?q=JavaScript%E6%95%99%E7%A8%8B
// 使用 encodeURIComponent
let param = "JavaScript教程";
let encodedParam = encodeURIComponent(param);
console.log(encodedParam); // 输出: JavaScript%E6%95%99%E7%A8%8B
问题:为什么某些字符没有被转码?
原因:这些字符是URI的保留字符,它们在URI中有特定的用途,编码它们可能会破坏URI的结构和意义。
解决方法:如果你需要对特定字符进行编码,可以考虑手动替换这些保留字符,或者使用正则表达式来处理。
function customEncode(str) {
return str.replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16).toUpperCase();
});
}
let customEncoded = customEncode("JavaScript教程!");
console.log(customEncoded); // 输出: JavaScript%E6%95%99%E7%A8%8B%21
通过这种方式,你可以灵活地控制哪些字符需要被编码,哪些不需要。
没有搜到相关的文章