piapia123
zh

URL 编码与解码

编码加密

所有处理都在浏览器本地完成,数据不上传服务器

输入
输出

把文本按 percent-encoding 转义成 %XX 形式,或把 %XX 还原回文本。两种方式的结果只差 11 个字符:encodeURIComponent 会把 & 编成 %26,encodeURI 则保留它。前者用于编码参数值(值里的 & 和 = 若不编掉,会被服务器当成参数分隔符,悄悄多切出一个参数),后者用于编码整个 URL(:// ? & = # 是它的结构,不能编)。选错不会报错,只会让链接在别人那儿打不开,所以这里把选择摆到明面上。解码出错时还会区分原因:转义被截断,还是原文根本不是 UTF-8。

功能

  • 双向转换:文本 ⇄ percent-encoding(%XX)
  • 两种方式可选:encodeURIComponent(编参数值)与 encodeURI(编整个 URL)
  • 中文、空格与 emoji 一律按 UTF-8 编码,与浏览器地址栏里的写法一致
  • 解码失败时指出具体原因:转义被截断(% 后面不是两位十六进制数)还是原文不是 UTF-8(如 GBK)
  • 明确不把 + 当成空格 —— 那是表单编码的规则,不是 percent-encoding
  • 输入即出结果,不需要点按钮

使用方法

  1. 选择方向:编码或解码
  2. 选择编码方式:编参数值还是整个 URL
  3. 把内容粘贴进输入框,结果实时出现
  4. 点「复制」取走结果

常见问题

encodeURIComponent 和 encodeURI 到底该用哪个?
一条规则就够:整条 URL 用 encodeURI,单独的参数值用 encodeURIComponent。两者只在 ; , / ? : @ & = + $ # 这 11 个字符上分歧 —— encodeURI 保留它们(URL 的结构靠它们),encodeURIComponent 把它们也编掉。把整条 URL 丢给 encodeURIComponent,连 https:// 里的 :// 都会被编掉,得到的地址直接打不开。
为什么解码后还留着 %3F、%2F 这样的转义?
因为编码方式选的是 encodeURI 那一档。它对应的 decodeURI 同样不还原保留字符 —— %3F 的意思是「这里是数据里的一个 ?,不是查询串的开头」,还原成 ? 会改变 URL 的含义。想全部还原,切到 encodeURIComponent 那一档。
空格为什么编成 %20 而不是 +?
percent-encoding 里空格的转义就是 %20。用 + 表示空格是表单提交(application/x-www-form-urlencoded)的另一套规则,两者不能混用。本工具遵循前者,也不会把 + 解成空格。
提示「原文可能不是 UTF-8」是什么意思?
转义序列本身是完整的,但解出来的字节不是合法的 UTF-8 —— 常见于从 GBK 编码的老系统里复制出来的链接。GBK 的「你」是 %C4%E3,而 UTF-8 下是 %E4%BD%A0。这种情况本工具无法替你猜编码,建议改用支持指定编码转换的工具。

相关工具