URL编码大全:一键转换所有特殊字符
URL编码大全
URL编码(Percent-Encoding)是一种将特殊字符转换为%后跟两位十六进制数的标准机制,用于确保URL在传输过程中的安全性和兼容性。以下是核心内容:
一、编码规则
-
保留字符:必须编码的字符(RFC 3986定义):
! → %21 # → %23 $ → %24 & → %26 ' → %27 ( → %28 ) → %29 * → %2A + → %2B , → %2C / → %2F : → %3A ; → %3B = → %3D ? → %3F @ → %40 [ → %5B ] → %5D -
非安全字符:需编码的常见字符:
空格 → %20 " → %22 % → %25 < → %3C > → %3E \ → %5C ^ → %5E ` → %60 { → %7B | → %7C } → %7D -
Unicode字符:
中文字符等需转为UTF-8字节序列后逐字节编码,例如:中→ UTF-8字节:E4 B8 AD→%E4%B8%AD文→%E6%96%87
二、常见字符编码表
| 字符 | 编码 | 字符 | 编码 | 字符 | 编码 |
|---|---|---|---|---|---|
| 空格 | %20 | @ | %40 | \ | %5C |
| ! | %21 | [ | %5B | ] | %5D |
| " | %22 | ^ | %5E | ` | %60 |
| # | %23 | _ | %5F | { | %7B |
| $ | %24 | ' | %27 | | | %7C |
| % | %25 | ( | %28 | } | %7D |
| & | %26 | ) | %29 | ~ | %7E |
| + | %2B | - | 不编码 | . | 不编码 |
| / | %2F | 0-9 | 不编码 | a-z | 不编码 |
| : | %3A | A-Z | 不编码 |
三、编程实现示例
# Python示例
from urllib.parse import quote, unquote
# 编码
encoded = quote("搜索!@#", safe="") # → '%E6%90%9C%E7%B4%A2%21%40%23'
# 解码
decoded = unquote("%E6%96%87%E4%BB%B6") # → '文件'
// JavaScript示例
const encoded = encodeURIComponent("文件/name"); // → '%E6%96%87%E4%BB%B6%2Fname'
const decoded = decodeURIComponent("%21%40"); // → '!@'
四、关键注意事项
-
保留字符差异化处理:
encodeURI(JavaScript)不编码;,/?:@&=+$等,适用于完整URL。encodeURIComponent编码所有非字母数字字符,适用于URL片段(如查询参数)。
-
空格处理:
- 历史兼容性:
+或%20均可(现代标准优先%20)。
- 历史兼容性:
-
编码一致性:
- 非ASCII字符必须使用UTF-8编码(如中文需先转UTF-8字节)。
-
解码安全:
避免多次编码/解码(如%2520→ 第一次解码为%20→ 第二次解码为空格)。
五、特殊场景
- 查询参数:
?key=value&name=测试→?key=value&name=%E6%B5%8B%E8%AF%95 - 文件路径:
/doc/报告.pdf→/doc/%E6%8A%A5%E5%91%8A.pdf - 邮箱地址:
user@domain.com→user%40domain.com(仅需编码@)

浙公网安备 33010602011771号