Global
[TOC]
索引
字符编码:
- encodeURI():
(uri)
,替代 escape(),用于对完整 URI进行编码的函数,遵循 UTF-8 编码标准,保留 URI 的合法字符(如协议、域名、路径中的/
等)。 - decodeURI():
(encodedURI)
,替代 unescape(),用于解码通过 encodeURI() 编码的 URI的函数。保留 URI 的结构(如路径分隔符/
、查询符?
等),并支持 UTF-8 编码的字符解码。 - encodeURIComponent():
(str)
,替代 escape(),用于对 URI 组成部分(如查询参数、哈希值等)进行编码的函数。遵循 UTF-8 编码标准,会对更多字符(如/
,?
,=
等)进行编码,适合处理 URL 的局部内容。 - decodeURIComponent():
(encodedURI)
,替代 unescape(),用于解码由 encodeURIComponent() 编码的字符串的函数。它专门处理 URI 组成部分(如查询参数、哈希值等),将转义序列还原为原始字符,支持 UTF-8 编码标准。 - escape():
(str)
,已废弃,用于将字符串编码成新的由十六进制转义序列替换的字符串。 - unescape():
(str)
,已废弃,用于解码通过escape()
编码的字符串的旧方法。
Global
字符编码
encodeURI()
encodeURI():(uri)
,替代 escape(),用于对完整 URI进行编码的函数,遵循 UTF-8 编码标准,保留 URI 的合法字符(如协议、域名、路径中的 /
等)。
uri:
string
,要编码的完整 URI 字符串。可以是绝对 URL 或相对 URL。返回:
encodedURI:
string
,返回一个新的字符串,其中非法字符被替换为 UTF-8 编码的十六进制转义序列。
语法特性:
不会被编码的字符:
textA-Z a-z 0-9 // 字母和数字 - _ . ! ~ * ' ( ) // 特殊符号 ; / ? : @ & = + $ , # // URI 保留字符(encodeURIComponent中会被编码)
会被编码的字符:
- 空格 →
%20
- 非 ASCII 字符(如中文、Emoji)→ 多字节 UTF-8 编码(如
中
→%E4%B8%AD
) - 其他非法字符(如
"
、{
、}
)→ 对应的%XX
或%XX%XX...
形式。
- 空格 →
对比 encodeURIComponent():
encodeURI()
:保留 URI 的合法分隔符(如/
,?
,=
,&
,#
),适合编码完整 URI。encodeURIComponent()
:编码更多字符(包括/, ?, =, &
等),适合编码URI 的组成部分(如查询参数值)。
jsencodeURI("/path?name=John") // 返回 "/path?name=John"(保留 `/` 和 `?`) encodeURIComponent("/path?name=John") // 返回 "%2Fpath%3Fname%3DJohn"
示例:
基本编码:
js// 测试路径 -> %E6%B5%8B%E8%AF%95%E8%B7%AF%E5%BE%84 // 张三 -> %E5%BC%A0%E4%B8%89 // : / ? -> 被保留 encodeURI("https://example.com/测试路径?name=张三&age=20") // 返回 "https://example.com/%E6%B5%8B%E8%AF%95%E8%B7%AF%E5%BE%84?name=%E5%BC%A0%E4%B8%89&age=20"
decodeURI()
decodeURI():(encodedURI)
,替代 unescape(),用于解码通过 encodeURI() 编码的 URI的函数。保留 URI 的结构(如路径分隔符 /
、查询符 ?
等),并支持 UTF-8 编码的字符解码。
encodedURI:
string
,一个已编码的完整 URI 字符串(通常由 encodeURI() 生成)。返回:
uri:
string|URIError
,- 解码成功:返回一个解码后的新字符串,将 encodeURI() 生成的转义序列还原为原始字符。
- 错误处理:包含无效的转义序列(如
%XX
中XX
非十六进制数,或%
后不足两位字符),会抛出URIError
。
语法特性:
解码规则:
- UTF-8 转义序列(如
%E4%B8%AD
)→ 解码为对应 Unicode 字符(如中
)。 - 保留字符(如
/
,?
,=
,&
,#
)→ 保持原样,不进行解码。 - 非法转义序列(如不完整的
%XX
或无效的 UTF-8 编码)→ 抛出URIError
。
- UTF-8 转义序列(如
对比 decodeURIComponent():
decodeURI()
:仅解码由encodeURI()
编码的字符,保留 URI 保留字符(如/
,?
,=
)。decodeURIComponent()
:解码由encodeURIComponent()
编码的字符串,包括 URI 保留字符(如/
→%2F
)。
jsdecodeURI("%2F") // 返回 "%2F"(不处理 `/` 的编码) decodeURIComponent("%2F") // 返回 "/"(解码 `/`)
编码一致性:始终与
encodeURI()
配对使用,避免与encodeURIComponent()
混用。
示例:
基本解码:
- 路径
/path
、查询符?
、哈希符#
未被解码。 %E5%BC%A0%E4%B8%89
会被解码成张三
。
jsdecodeURI("https://example.com/path?name=%E5%BC%A0%E4%B8%89&age=20#section") // 返回 "https://example.com/path?name=张三&age=20#section"
- 路径
encodeURIComponent()
encodeURIComponent():(str)
,替代 escape(),用于对 URI 组成部分(如查询参数、哈希值等)进行编码的函数。遵循 UTF-8 编码标准,会对更多字符(如 /
, ?
, =
等)进行编码,适合处理 URL 的局部内容。
str:
string
,需要编码的字符串(通常作为 URI 的一部分,如查询参数值)。返回:
encodedURI:
string
,返回一个新的字符串,其中非法字符被替换为 UTF-8 编码的十六进制转义序列。
语法特性:
不会被编码的字符:
textA-Z a-z 0-9 // 字母和数字 - _ . ! ~ * ' ( ) // 特殊符号
会被编码的字符:
- 空格 →
%20
(而非+
)。 - 非 ASCII 字符(如中文、Emoji)→ 多字节 UTF-8 编码(如
中
→%E4%B8%AD
)。 - 其他非法字符(如
{
,}
,"
)→ 对应的%XX
或%XX%XX...
形式。 - URI 保留字符(如
/
,?
,=
,&
,#
等)→ 转为%XX
形式(encodeURI 中不会被编码)。
- 空格 →
对比 encodeURI:见 encodeURI()
处理
+
和空格:encodeURIComponent()
将空格编码为%20
,而表单提交(application/x-www-form-urlencoded
)中空格可能转为+
。若需兼容表单格式,可手动替换:
jsencodeURIComponent("a b").replace(/%20/g, "+") // 返回 "a+b"
示例:
编码查询参数::
jsencodeURIComponent("name=张三&age=20") // 返回 "name%3D%E5%BC%A0%E4%B8%89%26age%3D20" // = → %3D,& → %26,张 → %E5%BC%A0
处理特殊符号:
jsencodeURIComponent("Hello World! 😊") // 返回 "Hello%20World%21%20%F0%9F%98%8A" // 空格 → %20,! → %21,😊 → %F0%9F%98%8A
编码路径片段:
jsencodeURIComponent("/path/to/file") // 返回 "%2Fpath%2Fto%2Ffile" // / → %2F
decodeURIComponent()
decodeURIComponent():(encodedURI)
,替代 unescape(),用于解码由 encodeURIComponent() 编码的字符串的函数。它专门处理 URI 组成部分(如查询参数、哈希值等),将转义序列还原为原始字符,支持 UTF-8 编码标准。
- encodedURI:
string
,一个已编码的字符串(通常由 encodeURIComponent() 生成)。 - 返回:
- uri:
sring|URIError
,- 成功解码:返回一个解码后的新字符串,将所有有效的转义序列还原为原始字符。
- 错误处理:包含无效的转义序列(如
%XX
中XX
非十六进制数,或%
后不足两位字符),会抛出URIError
。
语法特性:
解码规则:
- 转义序列解码:
- 单字节字符:
%XX
(XX
为两位十六进制数)→ 解码为对应的 ASCII 字符。 - 多字节 UTF-8 字符:
%XX%YY%ZZ...
→ 合并为 UTF-8 编码的 Unicode 字符。
- 单字节字符:
- 保留字符解码:URI 保留字符(如
/
,?
,=
)的编码会被还原。
- 转义序列解码:
编码一致性:始终与
encodeURIComponent()
配对使用,避免与encodeURI()
混用。错误处理:使用
try...catch
处理可能抛出的URIError
,尤其是在处理用户输入或外部数据时。jstry { decodeURIComponent("%GG"); // 无效的十六进制(GG 非合法) } catch (e) { console.error(e); // 抛出 URIError: URI malformed }
处理
+
和空格:- 表单提交(
application/x-www-form-urlencoded
)会将空格转为+
,而encodeURIComponent()
转为%20
。 - 若需兼容,可手动替换:
jsconst encoded = encodeURIComponent("a b").replace(/%20/g, "+"); // "a+b" const decoded = decodeURIComponent(encoded.replace(/+/g, "%20")); // 还原为 "a b"
- 表单提交(
示例:
解码查询参数:
jsdecodeURIComponent("name%3D%E5%BC%A0%E4%B8%89%26age%3D20") // 返回 "name=张三&age=20" // %3D → =,%E5%BC%A0 → 张,%26 → &
处理特殊符号:
jsdecodeURIComponent("%24%23%25") // 返回 "$#%" // %24 → $,%23 → #,%25 → %
解码 Unicode 字符:
jsdecodeURIComponent("%F0%9F%98%8A") // 返回 "😊" // %F0%9F%98%8A -> 😊
escape()
escape():(str)
,已废弃,用于将字符串编码成新的由十六进制转义序列替换的字符串。
str:
string
,要编码的字符串。返回:
str:
string
,返回一个新的字符串,其中某些字符被替换为十六进制转义序列。具体规则如下:- 不转义的字符:ASCII 字母(
A-Z a-z
)、数字(0-9
)、以及特殊符号@*_+-./
。 - 转义的字符:
- 其他字符会被替换为
%XX
(XX
是字符的十六进制码点,适用于码点小于0xFF
的字符)。 - Unicode 字符(码点 ≥
0xFF
)会被替换为%uXXXX
(UTF-16 编码的码元)。
- 其他字符会被替换为
- 不转义的字符:ASCII 字母(
语法特性:
- 废弃原因:对 Unicode 字符处理不符合现代标准(如 UTF-8)。
- 替代方案:
示例:
基本字符:
jsescape('abc123@*-_+./') // 返回 "abc123@*-_+./"
空格和符号:
jsescape('Hello World!') // 返回 "Hello%20World%21"
Latin-1 字符:
jsescape('é') // 返回 "%E9"(假设字符编码为 Latin-1)
Unicode 字符:
jsescape('α') // 返回 "%u03B1"(Unicode 码点 U+03B1) escape('😊') // 返回 "%uD83D%uDE0A"(UTF-16 代理对)
unescape()
unescape():(str)
,已废弃,用于解码通过 escape()
编码的字符串的旧方法。
str:
string
,需要解码的字符串(通常由 escape() 编码生成)。返回:
str:
string
,返回一个解码后的新字符串,将 escape() 生成的转义序列还原为原始字符。
语法特性:
解码规则:
%XX
(XX
为两位十六进制数)→ 解码为 Latin-1 字符(码点0x00
到0xFF
)。%uXXXX
(XXXX
为四位十六进制数)→ 解码为 Unicode 字符(UTF-16 码元)。- 其他字符(如字母、数字、保留符号)→ 保持不变。
废弃原因:
- 不支持 UTF-8 编码(仅支持 Latin-1 和 UTF-16)。
- 无法正确处理 URL 编码(如
+
解码为空格、保留字符处理不一致)。
替代方案:
示例:
简单解码:
jsunescape("Hello%20World%21") // 返回 "Hello World!" unescape("%E9") // 返回 "é"(Latin-1 字符) unescape("%u03B1") // 返回 "α"(Unicode 字符)
混合编码字符:
jsunescape("Name%3A%20%u5F20%u4E09") // 返回 "Name: 张三"
%3A
→:
%20
→ 空格%u5F20
→张
%u4E09
→三
无法处理 UTF-8 编码:
jsunescape("%F0%9F%98%8A") // 返回 "😊"(错误解码,应为 "😊")
%F0%9F%98%8A
是😊
的 UTF-8 编码,但unescape()
按字节解码,导致乱码。