URL 编码详解:何时用 encodeURI 与 encodeURIComponent
2026-05-28
快速回答
快速回答: 查询参数值用 encodeURIComponent,已有结构的完整 URL 用 encodeURI。表单与 API 客户端上线前,在我们的 URL 编码器 中测试字符串。
URL 编码做什么
保留字符(&、=、?、#、空格)会破坏 URL 解析。百分号编码用 %XX 字节序列替换它们(Unicode 使用 UTF-8)。
encodeURI 与 encodeURIComponent
const q = "hello world";
encodeURIComponent(q); // "hello%20world" — safe for ?q=
encodeURI("https://example.com/a b"); // encodes path spaces only
常见 bug
- 对已编码字符串再编码(
hello%20world→ 双重编码) - 在路径中用
+表示空格(旧式查询写法,路径不安全) - 把 JSON 塞进查询参数却忘记编码
载荷在系统间传递时,可对照 Unicode 转义 与 Base64。
常见问题
应该编码整个 URL 吗?
通常只编码组成部分(路径段、查询值)。过度编码 :// 会破坏 URL。
Unicode 字符如何编码?
UTF-8 字节做百分号编码,例如 世界 → %E4%B8%96%E7%95%8C。
URL 编码与 Base64 一样吗?
不一样。Base64 用于任意二进制/文本传输;URL 编码保持 URL 可解析。