JavaScript encodeURI()

原创
admin 4个月前 (08-19) 阅读数 34 #JavaScript

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() 编码的 URI
  • encodeURIComponent() - 对 URI 组件进行编码,会编码更多字符
  • decodeURIComponent() - 解码由 encodeURIComponent() 编码的 URI 组件
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。

作者文章
热门
最新文章
标签列表