工具快速入口:
URL 编解码工具
json.itzhai.com
纯前端,本地处理
要点速览
- 结论 1: 整条 URL 用
encodeURI,单个参数值用encodeURIComponent。 - 结论 2: 表单的
application/x-www-form-urlencoded把空格编码成+,不是%20。 - 结论 3: 只做 一次 编码/解码;避免双重编码(出现
%2520等)。 - 结论 4: 统一使用 UTF-8;中文等非 ASCII 先转字节,再逐字节
%HH。
为什么需要对 URL 进行编码?
为了在只允许 ASCII 与部分“安全字符”的 URL 中,安全携带中文、空格与特殊符号,避免结构被误解与传输损坏。
编码的本质是把字节转换为形如 %E4%B8%AD 的 percent-encoding。
URL 与 URI 有什么区别?哪些字符必须编码?
URI 是抽象集合,URL 是最常用的一种 URI;需要编码的是“非保留/非不保留之外”的字符与特定语境下的保留字符。
- 不保留(无需编码):
A–Z a–z 0–9 - _ . ~ - 保留(语义相关):
:/?#[]@!$&'()*+,;=(在路径/查询等语境有特殊含义) - 其他字符(空格、中文、控制符等):必须编码为
%HH(UTF-8 每个字节单独编码)。
该用 encodeURI 还是 encodeURIComponent?
整条 URL 用 encodeURI;查询参数“值”用 encodeURIComponent。
| 场景 | 推荐 | 说明 |
|---|---|---|
| 安全化一整条 URL | encodeURI(url) |
保留 :/?&#=… 等结构字符 |
| 设置/拼接查询参数 值 | encodeURIComponent(value) |
会把 & = / 等全部编码 |
| 解码 | decodeURIComponent(参数值)/ decodeURI(整条 URL) |
视内容而定 |
示例
1 | // ❌ 错:参数值用 encodeURI,& 会漏掉 |
表单编码(application/x-www-form-urlencoded)是什么?为什么空格会变成 +?
表单序列化使用的传统编码规则把空格写作 +,其余仍按 %HH。
因此解析表单时应先做 + → 空格,再 decodeURIComponent。
JS 安全解码(表单风格)
1 | function formDecode(s) { |
不同场景应该选择哪种编码方式?
优先用“带语义的 API”,避免手工拼接。
| 任务 | 推荐做法 |
|---|---|
| 构造完整 URL(含查询) | URL 与 URLSearchParams(JS/Node)或各语言等价库 |
| 设置查询参数值 | encodeURIComponent 或 URLSearchParams.set/append |
编码路径段(如 /users/{id} 的 id) |
encodeURIComponent(JS)、PathEscape(Go) |
| 解析表单/传统查询串 | + → 空格 后再 decodeURIComponent(或用语言自带表单解析) |
URL 编解码最常见的 5 个错误是什么?如何排查?
- 双重编码:出现
%2520、%253F。→ 只编码一次;区分“原始文本” vs “已编码文本”。 - 把
encodeURI用在参数值:&、=漏掉。→ 参数值一律encodeURIComponent。 - 忘记处理表单的
+:空格仍是+。→s.replace(/\+/g, ' ')。 - 字符集不一致:中文乱码。→ 前后端统一 UTF-8。
- 不完整转义导致异常:
%残缺。→try/catch,必要时先做合法性检查或使用“安全解码”。
1 | function safeDecode(s) { |
如何构造与解析查询串(前端实战)?
结论:使用原生 URL / URLSearchParams 最稳。
1 | // 构造 |
%20 和 + 有什么区别?为什么有时 / 要编码?
%20 与 + 都可表示空格,但 + 仅在表单编码中使用;路径段中的 / 是结构字符,作为内容时必须编码 %2F。
在查询参数值中,/ 也应编码,避免被解释为路径分隔。
各语言如何做 URL 编解码(速览)?
JavaScript
1 | const u = new URL('https://ex.com/search'); |
Python
1 | from urllib.parse import urlencode, urlparse, parse_qs, quote, unquote, quote_plus, unquote_plus |
Go
1 | import "net/url" |
Java
1 | import java.net.URLEncoder; |
我只需要记住哪些?
- 整条 URL →
encodeURI;参数值 →encodeURIComponent。 - 表单编码空格是
+,解析时先+→空格再解码。 - 只做一次 编码/解码,统一 UTF-8。
需要一个现成工具吗?
URL 编解码工具(在线)
json.itzhai.com
支持 UTF-8、表单 + 处理、一键复制、深色模式。