URL Escape 在线编解码
什么是URL 编码
URL 编码(URL encode),也称为百分号编码(percent-encoding),是一种将字符转换为可在 URL 中安全传输的格式的方法。
编码的目的
- 符合 URL 规范: URL 只能使用特定的字符集,包括字母、数字和一些特殊字符(如 -_.~ 等)。对于不在这个字符集中的字符,需要进行编码以便能够在 URL 中传输。 例如,空格在 URL 中是不允许直接出现的字符,会被编码为 %20。
- 防止歧义: 某些字符在 URL 中有特殊含义,如 /、?、& 等。如果不进行编码,可能会导致 URL 解析错误。例如,如果要在 URL 中传递一个包含问号 ? 的参数值,就需要对问号进行编码,否则会被误认为是参数分隔符。
编码规则
- 对于需要编码的字符,将其 ASCII 值转换为十六进制数,然后在前面加上 % 符号。 例如,字符 # 的 ASCII 值为 35,转换为十六进制为 23,所以在 URL 编码中,# 被编码为 %23。
- 保留字符和非保留字符: 保留字符包括用于分隔 URL 不同部分的字符(如 /、?、:、#、[、]、@、!、$、&、'、(、)、*、+、,、;、=)以及用于控制 URL 编码和解码的字符(如 %)。这些字符在特定情况下有特定的用途,一般情况下如果它们不是用于其特殊用途,也需要进行编码。 非保留字符包括字母、数字以及 -_.~ 这几个字符。这些字符可以直接出现在 URL 中而不需要进行编码。
应用场景
Go实现
url.QueryEscape("https://www.cyeam.com")| 字符 | URL编码 | 说明 | 
|---|---|---|
| 空格 | %20 | 网页中最常用的编码之一,用于替换空格 | 
| 斜杠 | %2F | 用于分隔 URL 路径(如 https%3A%2F%2Fexample.com) | 
| 问号 | %3F | URL 中查询参数的起始符号(如 ?key=value) | 
| 等号 | %3D | 查询参数中键值对的连接符(如 key%3Dvalue) | 
| 与符号 | %26 | 多个查询参数的分隔符(如 key1%3Dvalue1%26key2%3Dvalue2) | 
| 井号 | %23 | 用于 URL 锚点(如 #section) | 
| 加号 | %2B | 表示空格或正号(在表单提交中常见) | 
| 百分号 | %25 | 转义自身(因为 URL 编码以 %开头) | 
| 逗号 | %2C | 用于分隔参数或路径(如 CSV 文件下载链接) | 
| 冒号 | %3A | 用于分隔 URL 协议和端口(如 https%3A//) | 
| 分号 | %3B | 在某些 URL 格式中用于分隔参数 | 
| 大于号 | %3E | 符号 >的编码 | 
| 小于号 | %3C | 符号 <的编码 | 
| 感叹号 | %21 | 符号 !的编码 | 
| 星号 | %2A | 符号 *的编码 | 
| 单引号 | %27 | 符号 '的编码 | 
| 双引号 | %22 | 符号 "的编码 | 
| 括号 | %28(左)、%29(右) | 符号 (和)的编码 | 
| 方括号 | %5B(左)、%5D(右) | 符号 [和]的编码 | 
| 花括号 | %7B(左)、%7D(右) | 符号 {和}的编码 | 
| 竖线 | %7C | 符号 `|` | 
| 波浪线 | %7E | 符号 ~的编码 | 
| at 符号 | %40 | 符号 @的编码(常用于邮箱地址在 URL 中) | 
| 美元符号 | %24 | 符号 $的编码 | 
| 英镑符号 | %A3 | 符号 £的编码(根据字符集不同可能有差异) | 
