URL 编码器与解码器
对 URL 和查询字符串中的文本进行百分号编码,解码已编码的 URL,并把任意 URL 拆分成各个部分,同时解码查询参数。
在浏览器中运行无需注册不上传任何数据
已编码
组成部分
查询参数
如何使用URL 编码/解码
- 选择编码或解码。
- 编码时,单个查询值或路径片段选择组件,要保留 URL 结构选择完整 URL,选择表单数据则用于
application/x-www-form-urlencoded。 - 粘贴你的文本。结果立即显示;格式错误的转义会连同其位置一起报告。
- 把完整 URL 粘贴到URL 解析器中,即可查看其主机、路径、片段以及解码后的每个查询参数。
什么是 URL 编码?
URL 只能包含有限的一组 ASCII 字符(RFC 3986)。其他所有字符,包括空格、中文等非英文字符,以及 &、? 和 # 这类具有特殊含义的字符,都要把每个 UTF-8 字节写成百分号加两位十六进制数字。空格变成 %20,é 变成 %C3%A9。
encodeURIComponent 与 encodeURI
| 函数 | 不编码的字符 | 适用场景 |
|---|---|---|
encodeURIComponent | A-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 后面跟着十六进制数字,说明该值很可能被编码了两次。解码两次即可还原。