URL / URI 组件的编码与解码
URL 编码(Percent-encoding)是将 URL 中的特殊字符和非 ASCII 字符转换为 %XX 形式的编码方式。它确保 URL 在传输过程中不会因为包含保留字符而被错误解析,是 Web 开发中最基础的编码操作之一。
| 函数 | 用途 | 不编码的字符 |
|---|---|---|
encodeURI() |
编码完整 URL | 保留 :/?#[]@!$&'()*+,;=-._~ |
encodeURIComponent() |
编码参数值 | 仅保留字母、数字和 -_.!~*'() |
常用编码对照:空格 → %20、& → %26、= → %3D、+ → %2B、# → %23
HTML 表单(
application/x-www-form-urlencoded)将空格编码为+,而 RFC 3986 标准编码为%20,二者不同。
编码整个 URL 用 encodeURI()(保留 ://、?、& 等结构字符);编码单个参数值用 encodeURIComponent()(会编码 &、= 等字符,防止破坏查询字符串结构)。
%20 还是 +?取决于上下文。URL 路径和查询参数中推荐使用 %20(RFC 3986);HTML 表单提交(application/x-www-form-urlencoded)使用 +。两者在服务端通常都能正确解析。
现代浏览器会在地址栏对已编码的 URL 做可视化解码(显示中文),但实际发送的 HTTP 请求中仍然是百分号编码形式。