URL 解析器
用浏览器自带的 URL 解析器把网址拆成协议、主机、端口、路径、查询参数和片段,说明浏览器改了哪些地方、与 RFC 3986 读法有何不同,并可直接修改参数。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
示例一:百度搜索链接里的参数
在百度首页搜索时,表单除了搜索词 wd 还会提交一个隐藏字段 ie,值为 utf-8(2026-10-01 查看首页表单)。粘贴 https://www.baidu.com/s?ie=utf-8&wd=URL+%E8%A7%A3%E6%9E%90,查询参数表里有两行:ie 是 utf-8,wd 是 URL 解析。+ 被解码成空格,%E8%A7%A3%E6%9E%90 是“解析”两个字的 UTF-8 字节。这个链接没有任何提示,说明浏览器原样接受了它。
示例二:GBK 编码的旧链接
有些老系统按 GBK 生成链接,“你好”会写成 %C4%E3%BA%C3(用 Python 的 '你好'.encode('gbk') 可以核对)。粘贴 https://www.example.cn/search?q=%C4%E3%BA%C3,参数 q 显示为 ���,并标上“不是 UTF-8”。这是浏览器和 URLSearchParams 的真实行为:它们只按 UTF-8 解码,解不出的字节换成 U+FFFD。看到这个标记,就该回头检查生成链接的那一端用的是什么编码。
示例三:hash 路由里的参数不在查询串里
很多 H5 页面用 Vue Router 的 hash 模式,地址形如 https://m.example.cn/#/goods/detail?id=8&from=share。解析后查询参数是 0 个,id 和 from 都在片段 #/goods/detail?id=8&from=share 里。Vue Router 文档写明 # 之后的部分不会发送到服务器,所以服务端日志里看不到这两个参数,前端用 location.search 也取不到,要从 location.hash 里自己拆。
浏览器和服务端可能读出不同的主机
浏览器遵循 WHATWG URL 标准,服务端的库常按 RFC 3986 拆分,有些输入会因此读出两个不同的主机。http://evil.example\@good.example/login 是典型例子:浏览器把 http、https 等协议中的反斜杠当作斜杠,主机是 evil.example;按 RFC 3986 附录 B 拆分时,最后一个 @ 前面都算用户信息,主机是 good.example。2026-10-01 实测,Python 3.12 的 urllib.parse.urlsplit() 得到 good.example,curl 8.7.1 发出的 Host 头也是 good.example。工具遇到这种情况会给出警告。
http://0x7f.1/admin 同理:浏览器的 IPv4 解析器接受十六进制、八进制和省略写法,读成 127.0.0.1,RFC 3986 则把 0x7f.1 当作域名。做 SSRF 防护、只校验字符串的代码要特别留意这两类输入。
联调时常写的 localhost:8080/api/users 不会报错,但它被读成协议 localhost:、没有主机,拿去发请求必然失败。工具会指出这一点,并提供“按 https://localhost:8080/api/users 解析”的按钮。
修改参数不会改动其他参数
如果用 URLSearchParams.toString() 重新拼查询串,每个参数都会被重新编码:没写 = 的 flag 会变成 flag=,%zz 会变成 %25zz,示例二里的 GBK 字节会被替换成 %EF%BF%BD%EF%BF%BD%EF%BF%BD,原链接就此失效。本工具只重新编码你改动或新增的那一个参数,其余参数逐字节保留。修改字段时走浏览器自己的 setter(如 url.port = …),浏览器怎么接受,结果就怎么显示。
与同类工具的区别
2026-10-01 我们把同样 8 个网址粘贴到 cn.bing.com“url解析”结果靠前的易白工具(ebtool.com)。它同样基于浏览器的 new URL(),没写协议时会自动补 https://,也会隐藏密码;但反斜杠网址直接显示主机 evil.example,0x7f.1 显示为 127.0.0.1,localhost:3000/api 显示为协议 localhost:,都没有任何提示。仿冒域名 раураl.com 有“主机名是 Punycode”的提示,但“Unicode 主机名”一栏仍是 xn--l-7sba6dbr.com;不是 UTF-8 的参数(%E4%B8)显示为 �,没有说明原因。本工具的结果与浏览器一致,并把这些情况逐条说明。
限制
- 结果取决于你的浏览器。Node.js 24 通过了 web-platform-tests URL 用例 896 条中的 888 条,较旧的浏览器在边角输入上可能不同。
- Chromium(测试用 Chrome 152)会接受一些 URL 标准禁止的主机:
http://exa mple.com/的主机被读成exa%20mple.com,Node.js 则拒绝这个 URL。这时工具说明它按标准无效、指出是哪个字符,同时仍显示浏览器的读法。 - RFC 3986 一栏只做附录 B 的正则拆分和字符检查,不代表某个具体的库,服务端行为请用真实 URL 在自己的环境里核对。
- 不内置公共后缀列表(Public Suffix List),不会把
shop.example.com.cn拆成子域名和注册域名。 - 仿冒域名提示只覆盖混用文字和由形似拉丁字母的西里尔、希腊字母组成的标签。
- 查询参数表最多显示 500 个参数。
编码或解码单个值用 URL 编码 / 解码,查主机的解析记录用 DNS 查询工具,构造 OAuth 授权地址用 PKCE 生成器,查看页面实际请求过的 URL 用 HAR 文件分析器。
FAQ
解析结果和 JavaScript 的 new URL() 一样吗?
一样。工具直接调用浏览器的 URL 解析器,也就是 new URL() 背后的实现,遵循 WHATWG URL 标准。另外它用 RFC 3986 附录 B 的正则再拆一次,主机读法不同时会给出警告,方便核对服务端库的行为。
为什么 example.com/path 报错?
完整的 URL 必须带协议,例如 https://。没有协议时 new URL() 会抛错,工具会说明原因,并提供“按 https://example.com/path 解析”的按钮。/api/users、../img/logo.png 这类相对链接需要基准 URL,请在“基准 URL”里填写所在页面的地址。
查询参数里的 + 为什么变成了空格?
查询串按 application/x-www-form-urlencoded 规则解码,+ 表示空格,URLSearchParams 和大多数服务端框架都这样处理。要表示加号本身,应写成 %2B,例如 c%2B%2B 解码为 c++。工具会给含 + 的参数标上“+ 即空格”。
显示“不是 UTF-8”是什么意思?
说明这个参数的百分号编码不是按 UTF-8 生成的,常见于按 GBK 编码的旧系统链接。浏览器和 URLSearchParams 会把无法识别的字节换成 �(U+FFFD),工具照此显示并标出,原始字节在“原文”里保留。
URL 会被上传或保存吗?
不会。解析在当前标签页里用浏览器的 URL 与 TextDecoder 完成,页面不会带着你的 URL 发出请求,也不保存。URL 里的密码默认遮住,点“显示”才会出现。