URL 编码器与解码器

对 URL 和查询字符串中的文本进行百分号编码,解码已编码的 URL,并把任意 URL 拆分成各个部分,同时解码查询参数。

在浏览器中运行无需注册不上传任何数据

已编码

如何使用URL 编码/解码

  1. 选择编码或解码。
  2. 编码时,单个查询值或路径片段选择组件,要保留 URL 结构选择完整 URL,选择表单数据则用于 application/x-www-form-urlencoded。
  3. 粘贴你的文本。结果立即显示;格式错误的转义会连同其位置一起报告。
  4. 把完整 URL 粘贴到URL 解析器中,即可查看其主机、路径、片段以及解码后的每个查询参数。

什么是 URL 编码?

URL 只能包含有限的一组 ASCII 字符(RFC 3986)。其他所有字符,包括空格、中文等非英文字符,以及 &、? 和 # 这类具有特殊含义的字符,都要把每个 UTF-8 字节写成百分号加两位十六进制数字。空格变成 %20,é 变成 %C3%A9。

encodeURIComponent 与 encodeURI

函数不编码的字符适用场景
encodeURIComponentA-Z a-z 0-9 - _ . ~单个查询值、路径片段或参数名
encodeURI另外还有 : / ? # [ ] @ ! $ & ' ( ) * + , ; =需要保留结构的整个 URL

对查询值使用 encodeURI 是一个经典 bug:值中的 & 不会被转义,于是参数被拆成了两个。本工具的组件模式还会转义 ! ' ( ) *,以严格遵循 RFC 3986。

空格用 %20 还是 +?

在路径中,空格必须是 %20。在 HTML 表单提交(application/x-www-form-urlencoded)和许多查询字符串中,空格写作 +。解码表单数据时请启用将 + 视为空格;当加号本身有意义时(例如 jane+test@example.com)则请关闭它。

常见问题

为什么解码时提示“格式错误的转义”?
% 后面必须紧跟两位十六进制数字。字面上的百分号(例如“50% off”)应该被编码为 %25。错误信息会显示问题序列的位置。
“无效的 UTF-8 字节序列”是什么意思?
这些字节不是按 UTF-8 编码的,通常是因为文本由使用 Latin-1 的旧系统生成(例如 é 被编码为 %E9 而不是 %C3%A9),或者字符串在某个字符中间被截断了。
应该编码整个 URL,还是只编码参数?
用组件编码分别对每个参数名和参数值进行编码,然后用 = 和 & 连接起来。用组件模式编码完整 URL 会把 :// 也转义,从而破坏 URL。
重复编码会有问题吗?
会。对已编码的字符串再次编码会把 %20 变成 %2520。如果你看到 %25 后面跟着十六进制数字,说明该值很可能被编码了两次。解码两次即可还原。

相关工具