encodeURI() 和 decodeURI() 是 JavaScript 中用于编码和解码 URI 的函数。它们主要用于处理包含特殊字符的 URI,确保 URI 的有效性和安全性。
encodeURI()
encodeURI() 函数用于将 URI 编码为有效的 URI 字符串。它会将 URI 中的特殊字符(例如空格、中文、标点符号等)转换为 UTF-8 编码的十六进制转义序列(例如 %20 表示空格)。
重要: encodeURI() 不会 编码以下字符:A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # 这些字符在 URI 中具有特殊含义,但通常不需要编码。
示例:
假设有一个包含中文和空格的 URI:
const uri = "https://example.com/搜索 结果.html";
使用 encodeURI() 编码后:
const encodedURI = encodeURI(uri);
console.log(encodedURI); // 输出: https://example.com/%E6%90%9C%E7%B4%A2%20%E7%BB%93%E6%9E%9C.html
decodeURI()
decodeURI() 函数用于将编码后的 URI 解码回原始的 URI 字符串。它会将 encodeURI() 生成的十六进制转义序列转换回对应的字符。
示例:
使用上面编码后的 URI:
const decodedURI = decodeURI(encodedURI);
console.log(decodedURI); // 输出: https://example.com/搜索 结果.html
encodeURIComponent() 和 decodeURIComponent()
与 encodeURI() 和 decodeURI() 类似,JavaScript 还提供了 encodeURIComponent() 和 decodeURIComponent() 函数。它们的区别在于 encodeURIComponent() 会编码更多的字符,包括上面提到的那些 encodeURI() 不会编码的字符,例如 /、?、& 等。
通常情况下,encodeURIComponent() 用于编码 URI 的各个组成部分(例如查询参数的值),而 encodeURI() 用于编码整个 URI。
总结:
函数
作用
编码范围
encodeURI()
编码 URI
编码大部分特殊字符,但不编码保留字符
decodeURI()
解码 URI
解码 encodeURI() 编码的 URI
encodeURIComponent()
编码 URI 组件
编码几乎所有特殊字符,包括保留字符
decodeURIComponent()
解码 URI 组件
解码 encodeURIComponent() 编码的 URI 组件
希望以上解释和示例能够帮助你理解 encodeURI() 和 decodeURI() 的用法。