什么是 URL 编码?
URL 编码(百分号编码)是一种在统一资源标识符(URI)中编码信息的机制,通过将不安全的 ASCII 字符替换为 '%' 后跟两个表示字符字节值的十六进制数字来实现。
快速了解
| 全称 | 百分号编码 / URL 编码 |
|---|---|
| 创建时间 | 1994 年(RFC 1738,2005 年在 RFC 3986 中更新) |
| 规范文档 | 官方规范 |
工作原理
URL 编码确保 URL 只包含有效的 ASCII 字符。在 URL 中具有特殊含义的字符(如 &、=、?、/)或不允许的字符(如空格、非 ASCII 字符)必须进行编码。例如,空格变为 %20,与号变为 %26。这种编码对于在查询字符串、表单提交和 API 请求中传递数据至关重要。现代 Web 应用程序通常会自动处理 URL 编码,但理解它对于调试和 API 开发非常重要。
主要特点
- 将不安全字符替换为 %XX 十六进制格式
- 空格可以编码为 %20 或 +(在表单数据中)
- 保留字母数字字符(A-Z、a-z、0-9)
- 安全字符包括 - _ . ~
- UTF-8 字符被编码为多个 %XX 序列
- 十六进制数字不区分大小写(%2f 等于 %2F)
常见用途
- URL 中的查询字符串参数
- 表单数据提交(application/x-www-form-urlencoded)
- API 请求参数
- 文件路径中特殊字符的编码
- 创建安全的可分享 URL
示例
Loading code...常见问题
为什么需要 URL 编码?
URL 只能包含有限的 ASCII 字符集。空格、与号、中文等特殊字符和非 ASCII 字符必须编码,以确保在不同系统之间正确传输和解析。如果不编码,这些字符可能导致 URL 解析错误或安全问题。
空格编码为 %20 和 + 有什么区别?
两者都表示空格,但 %20 是标准的百分号编码,而 + 专门用于 application/x-www-form-urlencoded 内容(HTML 表单提交)。在查询字符串中经常使用 +,但 %20 具有更广泛的兼容性。建议在 URL 路径中使用 %20。
哪些字符不需要 URL 编码?
不需要编码的非保留字符包括:大小写字母(A-Z、a-z)、数字(0-9)以及四个特殊字符:连字符(-)、下划线(_)、句点(.)和波浪号(~)。这些字符可以直接出现在 URL 中。
中文字符在 URL 中如何编码?
中文字符首先转换为 UTF-8 字节序列,然后每个字节进行百分号编码。例如,「中」字的 UTF-8 编码是 E4 B8 AD,所以编码结果是 %E4%B8%AD。一个中文字符通常会变成 3 个 %XX 序列。
应该对整个 URL 编码还是只编码某些部分?
只应该编码查询参数的值和路径段中的特殊字符,而不是结构字符如 :、/、?、& 和 =。编码这些分隔符会破坏 URL 结构,使其无法解析。大多数编程语言提供专门的函数来正确处理这种情况。