什么是 URL 编码?
URL 只能包含有限的 ASCII 字符集。其他内容——空格、&、=、?、非 ASCII 字母——都必须进行百分号编码。每个不合法字节会被替换为 % 加上它的两位十六进制值。例如,空格变成 %20,é 变成 %C3%A9(它的 UTF-8 字节序列)。
encodeURIComponent 与 encodeURI 的区别
JavaScript 提供了两种转义规则不同的内建函数:
- encodeURIComponent 几乎对所有字符进行编码——适合将单个值嵌入查询字符串或路径片段中。
- encodeURI 会保留在完整 URL 中合法的字符(
:/?#[]@!amp;'()*+,;=),用于对整条 URL 字符串编码而不破坏其结构。
经验法则:将用户输入插入 URL 时用 encodeURIComponent;对已构造好的 URL 做规范化时用 encodeURI。
常见示例
- hello world
- hello%20world
- a+b=c
- a%2Bb%3Dc
- café
- caf%C3%A9
- https://x.com/?q=a b
- https%3A%2F%2Fx.com%2F%3Fq%3Da%20b