123问免费工具与知识服务
123问工具大全 工具大全 文本工具 URL编码解码

URL编码解码

百分号编码/解码,支持中文与特殊字符

URL编码解码常见问题

URL为什么要编码?

URL只能用ASCII字符集传输,中文、空格、特殊字符必须编码。编码后以%开头加两位十六进制表示,如"中"编码为%E4%B8%AD。

encodeURI和encodeURIComponent有什么区别?

encodeURI保留URL保留字符(:/?&=等),适合编码完整URL;encodeURIComponent编码所有特殊字符,适合编码查询参数。本工具提供两种模式。

中文在URL里怎么编码?

中文先按UTF-8转成字节,再逐字节转成%xx。例如"中"的UTF-8是E4 B8 AD,编码成%E4%B8%AD。这就是为什么中文URL编码后那么长。

空格编码后是%20吗?

在标准URL编码里,空格编码成%20。但在HTML表单的application/x-www-form-urlencoded里,空格会编码成"+"。两种场景别混用。

为什么解码有时会出现乱码?

通常是编码/解码字符集不一致。比如用GBK编码的URL,用UTF-8解码就会乱码。请确认编码时用的字符集再解码。

URL编码是加密吗?

不是。URL编码只是为了"安全传输字符",完全可逆,任何人都能解码。不要用它做安全保护。

哪些字符需要URL编码?

非ASCII字符(中文字符)、空格、以及URL里的保留字符(如?、&、#、%、/、:)。其中作为参数值的&、#、%等必须编码,否则会被当成URL语法。

URL编码解码 - 示例演示

示例一:中文查询参数编码

输入:模式:encodeURIComponent,输入:"q=中文测试"
结果:q=%E4%B8%AD%E6%96%87%E6%B5%8B%E8%AF%95
编码查询参数必须用encodeURIComponent,这样"中文测试"里的每个汉字都转成3字节的%xx。

示例二:完整URL编码

输入:模式:encodeURI,输入:"https://www.123wen.cn/search?q=中文"
结果:encodeURI保留"://"和"?=",只编码中文部分
encodeURI适合编码完整URL,不会把原本的URL作用符(/、?、&、=)转义掉。

示例三:解码还原

输入:模式:解码,输入:"%E4%B8%AD%E6%96%87"
结果:解码后:中文
把抓包、日志里的%xx编码还原成可读中文,调试接口很常用。

URL编码解码深度解读

百分号编码规则 (RFC 3986)

URL编码(Percent-encoding,百分号编码)是RFC 3986定义的标准,用于在URL中安全传输非ASCII字符和保留字符:

  • 格式:%后跟两个十六进制数字,如空格→%20,中→%E4%B8%AD
  • 保留字符(reserved)::/?#[]@!$&'()*+,;= —— 在URL中有特殊含义,用作参数值时必须编码
  • 非保留字符(unreserved):A-Z a-z 0-9 - _ . ~ —— 这些字符永远不需要编码
  • 其他字符(如中文、emoji):先按UTF-8转字节序列,再逐字节编码为%xx
  • 编码不可逆混用:不同的字符集编码会产生不同的%xx序列,解码时必须用相同字符集
  • URL长度限制:IE限制2083字符,Chrome限制约2MB,但实践中建议控制在2000字符以内

encodeURI vs encodeURIComponent 区别

JavaScript提供了两个URL编码函数,用错场景会导致URL失效:

JavaScript URL编码函数对比
函数保留的字符编码的字符使用场景
encodeURIA-Z a-z 0-9 - _ . ! ~ * ' ( ) ; / ? : @ & = + $ , #空格、中文、其他非ASCII字符编码完整URL(如地址栏中的链接)
encodeURIComponentA-Z a-z 0-9 - _ . ! ~ * ' ( )除保留外的所有字符,包括 / ? : @ & = + $ , #编码URL参数值(如查询字符串的值)
escape(已废弃)* @ - _ + . /除保留外的字符(且不遵循UTF-8)不要使用!已被废弃,编码结果不规范

关键规则:编码整个URL用encodeURI,编码查询参数用encodeURIComponent。如果用encodeURI编码"a&b",&不会被编码,会被误解为参数分隔符。

URL编码在GET请求中的应用

GET请求的参数通过URL的查询字符串传递,必须正确编码:

  • 格式:https://example.com/search?q=关键词&page=1&lang=zh
  • ? 后是查询字符串,每个参数用 key=value 表示,参数之间用 & 分隔
  • 如果value包含&、=、?、#等保留字符,必须编码,否则会破坏URL结构
  • 中文参数经过UTF-8 + URL编码后,一个汉字变成9个字符(% + 2个hex × 3字节)
  • 后端框架(Express、Flask、Spring等)通常自动解码查询参数,开发者无需手动处理
  • fetch/axios等HTTP库会自动编码查询参数对象,但手动拼接URL时必须自己编码
  • 空格在查询参数中可编码为%20或+(后者是HTML表单的约定),建议统一使用%20

URL编码解码参考数据

常见字符URL编码对照

字符URL编码说明
空格%20标准URL编码(非+)
!%21保留字符
"%22双引号
#%23URL片段标识符
$%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. 结果自动显示并可复制。

分享工具: Facebook Twitter 微博 复制链接