URL编码大全:一键转换所有特殊字符

URL编码大全

URL编码(Percent-Encoding)是一种将特殊字符转换为%后跟两位十六进制数的标准机制,用于确保URL在传输过程中的安全性和兼容性。以下是核心内容:


一、编码规则

  1. 保留字符:必须编码的字符(RFC 3986定义):

    ! → %21     # → %23     $ → %24     & → %26     ' → %27
    ( → %28     ) → %29     * → %2A     + → %2B     , → %2C
    / → %2F     : → %3A     ; → %3B     = → %3D     ? → %3F
    @ → %40     [ → %5B     ] → %5D
    
  2. 非安全字符:需编码的常见字符:

    空格 → %20   " → %22   % → %25   < → %3C   > → %3E
    \ → %5C      ^ → %5E   ` → %60   { → %7B   | → %7C   } → %7D
    
  3. 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");    // → '!@'

四、关键注意事项

  1. 保留字符差异化处理

    • encodeURI(JavaScript)不编码;,/?:@&=+$等,适用于完整URL。
    • encodeURIComponent 编码所有非字母数字字符,适用于URL片段(如查询参数)。
  2. 空格处理

    • 历史兼容性:+%20均可(现代标准优先%20)。
  3. 编码一致性

    • 非ASCII字符必须使用UTF-8编码(如中文需先转UTF-8字节)。
  4. 解码安全
    避免多次编码/解码(如%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.comuser%40domain.com(仅需编码@
posted @ 2025-08-29 15:40  UNbuff  阅读(388)  评论(0)    收藏  举报