URL编码解码
百分号编码/解码,支持中文与特殊字符
百分号编码/解码,支持中文与特殊字符
URL只能用ASCII字符集传输,中文、空格、特殊字符必须编码。编码后以%开头加两位十六进制表示,如"中"编码为%E4%B8%AD。
encodeURI保留URL保留字符(:/?&=等),适合编码完整URL;encodeURIComponent编码所有特殊字符,适合编码查询参数。本工具提供两种模式。
中文先按UTF-8转成字节,再逐字节转成%xx。例如"中"的UTF-8是E4 B8 AD,编码成%E4%B8%AD。这就是为什么中文URL编码后那么长。
在标准URL编码里,空格编码成%20。但在HTML表单的application/x-www-form-urlencoded里,空格会编码成"+"。两种场景别混用。
通常是编码/解码字符集不一致。比如用GBK编码的URL,用UTF-8解码就会乱码。请确认编码时用的字符集再解码。
不是。URL编码只是为了"安全传输字符",完全可逆,任何人都能解码。不要用它做安全保护。
非ASCII字符(中文字符)、空格、以及URL里的保留字符(如?、&、#、%、/、:)。其中作为参数值的&、#、%等必须编码,否则会被当成URL语法。
URL编码(Percent-encoding,百分号编码)是RFC 3986定义的标准,用于在URL中安全传输非ASCII字符和保留字符:
JavaScript提供了两个URL编码函数,用错场景会导致URL失效:
| 函数 | 保留的字符 | 编码的字符 | 使用场景 |
|---|---|---|---|
| encodeURI | A-Z a-z 0-9 - _ . ! ~ * ' ( ) ; / ? : @ & = + $ , # | 空格、中文、其他非ASCII字符 | 编码完整URL(如地址栏中的链接) |
| encodeURIComponent | A-Z a-z 0-9 - _ . ! ~ * ' ( ) | 除保留外的所有字符,包括 / ? : @ & = + $ , # | 编码URL参数值(如查询字符串的值) |
| escape(已废弃) | * @ - _ + . / | 除保留外的字符(且不遵循UTF-8) | 不要使用!已被废弃,编码结果不规范 |
关键规则:编码整个URL用encodeURI,编码查询参数用encodeURIComponent。如果用encodeURI编码"a&b",&不会被编码,会被误解为参数分隔符。
GET请求的参数通过URL的查询字符串传递,必须正确编码:
| 字符 | URL编码 | 说明 |
|---|---|---|
| 空格 | %20 | 标准URL编码(非+) |
| ! | %21 | 保留字符 |
| " | %22 | 双引号 |
| # | %23 | URL片段标识符 |
| $ | %24 | 保留字符 |
| % | %25 | 百分号本身 |
| & | %26 | 参数分隔符 |
| ' | %27 | 单引号 |
| ( | %28 | 左括号 |
| ) | %29 | 右括号 |
| * | %2A | 星号 |
| + | %2B | 加号(HTML表单中代表空格) |
| , | %2C | 逗号 |
| / | %2F | 路径分隔符 |
| : | %3A | 协议/端口分隔符 |
| ; | %3B | 参数分隔符 |
| = | %3D | 键值分隔符 |
| ? | %3F | 查询字符串起始符 |
| @ | %40 | 用户信息分隔符 |
| 中 | %E4%B8%AD | 中文"中"的UTF-8编码 |
| 国 | %E5%9B%BD | 中文"国"的UTF-8编码 |
1. 在输入框输入要编码/解码的文本。
2. 选择编码或解码模式。
3. 结果自动显示并可复制。