把一条链接拆成协议、域名、端口、路径、查询参数与 hash,逐项解码并提供原始/解码对照,查询参数一键转成 JSON,另带 encodeURIComponent 与 decodeURIComponent 换算,全部在浏览器本地完成。
把一条长链接拆开看:协议、域名、端口、路径、查询串、hash 分别是什么,参数有几个、每个的键和值解码后是什么。参数可以一键转成 JSON,方便贴进代码或对比两份链接的差异。
参数表支持「解码后 / 原始」一键切换:排查问题时经常要同时看这两种形态——解码后知道它表达什么,原始形态知道它实际发出去长什么样。
以 https://user:pass@shop.example.com:8443/goods/list?page=2#top 为例:https 是协议,shop.example.com 是主机名,8443 是端口,/goods/list 是路径,?page=2 是查询串,#top 是 hash。协议 + 主机名 + 端口合起来叫「源」(origin),浏览器的同源策略就是按这个判断的。
端口没写时用的是协议默认端口:https 443、http 80。origin 在比较时会省略默认端口,所以 https://a.com 与 https://a.com:443 是同一个源。
hash(# 之后的部分)只在浏览器里有效,不会发给服务器。单页应用常用 #/path?id=1 这种形式做前端路由,所以它的参数和 ? 后面的参数是两回事,需要分开看。
URL 只能用 ASCII 字符,中文、空格、& # ? 这类字符必须转成百分号编码(UTF-8 字节的十六进制,前面加 %)。「中」的 UTF-8 是 E4 B8 AD,编码后就是 %E4%B8%AD。
查询串里还有一个特殊规则:+ 代表空格(来自表单提交 application/x-www-form-urlencoded 的历史约定)。所以 a+b 与 a%20b 都表示「a b」。代价是如果你想表达真正的加号,必须写成 %2B,否则会被误解成空格。
同名参数(?tag=a&tag=b)在多数后端框架里会变成数组或列表,本工具在 JSON 里也合并成数组,并按出现顺序排列。只有键没有值的参数(?debug)在 JSON 里是空字符串,但很多框架会把它当作布尔开关,这一点要看具体后端实现。
拼查询参数用 encodeURIComponent,不要用 encodeURI。encodeURI 不会转义 & = ? / # 这些分隔符,把它们放进参数值里会直接把 URL 结构拆坏。
更稳的做法是不手拼字符串,而是用 URLSearchParams 或后端提供的 URL 构造函数:它们会自动处理转义、重复键和特殊字符,也省掉「值里带 & 就被截断」这类问题。
解码时要注意:decodeURIComponent 遇到不合法的 % 序列会抛 URIError。本工具会指出是第几个字符出错,而不是只报一句「解码失败」。
本工具免费、免登录、不限次数,解析全部由浏览器里的 JavaScript 完成。URL 不会上传到服务器,也不会被记录——这一点对含 token、手机号等敏感参数的链接尤其重要,但仍不建议把含密码的链接随便贴进任何网页工具。
% 后面必须紧跟两位十六进制数字(如 %E4)。出现 %ZZ、%E4 这种截断的序列时,浏览器解码会把它们变成乱码字符。本工具保留原文并标出是哪个参数,方便你去源头修正编码。
查询串按表单编码规则解析,+ 等于空格,这是 application/x-www-form-urlencoded 的历史约定。要表达真正的加号必须写成 %2B。如果把 + 当字面量传给后端,值里就会多出空格。
JSON 里合并成数组,顺序与 URL 中出现的一致,例如 ?tag=a&tag=b 会变成 {"tag":["a","b"]}。参数表里每一行仍然独立列出,并标上「同名」。
hash(# 之后)不会随请求发送给服务器,只在浏览器内有效。单页应用常用 #/path?id=1 存放路由参数,和 ? 后面的查询参数语义不同,所以分开解析、分开展示。
可以,但工具会明确标注:这类地址没有主机名,协议、域名、端口都是补全出来的占位值,只有路径和参数是真实的。
不会。解析与编解码都在你的浏览器里完成,页面只从服务端读取工具目录与使用策略,不接收你输入的 URL。