如何编码和解码 URL
如果您在 URL 中见过空格的位置是 %20,或重音字符的位置是 %C3%A9,那就是 URL 编码。它是 Web 的基础构建块,理解它有助于调试失效链接、API 问题和表单提交。
URL 编码做什么
URL 只能包含一组有限的安全字符:字母(A-Z、a-z)、数字(0-9)和少数特殊字符(-、_、.、~)。其他所有内容 · 空格、重音、emoji、&、=、#、? 等符号 · 必须转换为安全格式。
URL 编码(也叫 percent-encoding)将不安全字符替换为 % 后跟其字节的十六进制值:
| 字符 | 编码 |
|---|---|
| 空格 | %20 |
| & | %26 |
| = | %3D |
| # | %23 |
| ? | %3F |
| / | %2F |
| @ | %40 |
何时需要 URL 编码
- 含特殊字符的查询参数· 像
价格 > 100 & 类别 = 鞋这样的查询需要编码才能在 URL 中工作 - URL 中的非拉丁字符· 其他语言中的姓名、城市或内容必须编码
- API 请求· 手动构建 API 调用时,参数值通常需要编码
- 调试· 当 URL 不起作用时,解码它能揭示真实值
如何编码和解码
- 选择编码或解码· 选择方向。查询参数选 encodeURIComponent,完整 URL 选 encodeURI。
- 粘贴您的输入· 输入文本或 URL。结果即时更新。
- 复制输出· 在代码、API 请求或浏览器中使用结果。
小贴士
- 编码值,而不是整个 URL· 如果您编码整个 URL,组成 URL 结构的斜杠和冒号也会被编码,这会破坏 URL。只编码查询参数内部的值。
- 双重编码· 对已经编码的字符串再次编码会产生像
%2520这样的东西(%变成%25)。如果 URL 看起来不对,检查是否被编码了两次。 - 解码以调试· 当 API 请求失败或 URL 看起来难以理解时,解码它以查看真实值。这通常立即揭示问题。
- 使用语言的内置函数· 在生产代码中,始终使用
encodeURIComponent()(JavaScript)、urllib.parse.quote()(Python)或URLEncoder.encode()(Java),而不要手动编码。
常见问题
encodeURI 和 encodeURIComponent 有什么区别?
encodeURI 保留 URL 结构中的有效字符(斜杠、冒号、问号)。encodeURIComponent 对除字母、数字和少数安全字符外的所有内容进行编码。查询参数值使用 encodeURIComponent,完整 URL 使用 encodeURI。
为什么空格变成 %20 或 +?
在 URL 编码中,空格变为 %20。在表单数据(application/x-www-form-urlencoded)中,空格变为 +。两者在其上下文中都有效,但 %20 是 URL 的通用标准。
我需要手动编码 URL 吗?
大多数情况下,您的语言或框架会自动处理编码。手动编码在手工构建 URL、调试 API 请求或处理含特殊字符的查询字符串时很有用。
我的数据会发送到服务器吗?
不会。所有编码和解码都在您的浏览器中进行。