JavaScript encodeURI()
原创encodeURI() 函数详解
encodeURI() 是 JavaScript 中的一个内置函数,用于对统一资源标识符 (URI) 进行编码。它通过将特定字符替换为一个、两个、三或四个转义序列来实现编码功能,其中某些字符的 UTF-8 编码需要四个转义序列(由两个"代理"字符组成)。
语法
使用 encodeURI() 函数非常简单,其基本语法如下:
encodeURI(URI)
参数
该函数接受一个参数:
URI- 需要编码的完整统一资源标识符
返回值
encodeURI() 函数返回一个新字符串,表示将提供的 URI 编码后的结果。
功能描述
encodeURI() 函数假定传入的 URI 是完整的,因此不会对那些在 URI 中有特殊含义的保留字符进行编码。例如:
http://username:password@www.example.com:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor
该函数会替换所有字符,但不包括以下几类字符:
| 类型 | 包含的字符 |
|---|---|
| 保留字符 | ; , / ? : @ & = + $ |
| 非转义字符 | 字母、数字、- _ . ! ~ * ' ( ) |
| 数字符号 | # |
需要注意的是,encodeURI() 函数不能直接生成适用于 HTTP GET 或 POST 请求的 URI,因为它不会对 "&"、"+" 和 "=" 等在请求中有特殊含义的字符进行编码。如果需要编码这些字符,应使用 encodeURIComponent() 函数。
另外,当尝试编码一个不完整的高-低位代理字符时,函数会抛出 URIError 错误:
// 编码完整的高-低位字符是正常的
console.log(encodeURI("\uD800\uDFFF"));
// 编码单独的高位字符会抛出 "URIError: URI malformed"
console.log(encodeURI("\uD800"));
// 编码单独的低位字符会抛出 "URIError: URI malformed"
console.log(encodeURI("\uDFFF"));
如果需要遵循较新的 RFC3986 标准(方括号被保留用于 IPv6),可以使用以下函数对未被编码的 URL 部分(如主机名)进行编码:
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, "[").replace(/%5D/g, "]");
}
相关函数
与 encodeURI() 相关的函数包括:
decodeURI()- 解码由 encodeURI() 编码的 URIencodeURIComponent()- 对 URI 组件进行编码,会编码更多字符decodeURIComponent()- 解码由 encodeURIComponent() 编码的 URI 组件
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。
开发学习网


