URL 解析器

用浏览器自带的 URL 解析器把网址拆成协议、主机、端口、路径、查询参数和片段,说明浏览器改了哪些地方、与 RFC 3986 读法有何不同,并可直接修改参数。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
粘贴 URL 后随输入自动解析。完整 URL 需要 https:// 等协议,相对链接需要基准 URL。解析不会打开该地址,也不保存输入。
基准 URL(用于相对链接) 填入包含相对链接的页面的完整 URL,结果遵循 new URL(链接, 基准)。任一输入改变后都会立即更新结果。

输入后,这里显示规范化后的 URL、各字段和解码后的查询参数。

阅读完整使用指南 在线 URL 解析器:一键拆解 URL 结构,解码查询参数
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

示例一:百度搜索链接里的参数

在百度首页搜索时,表单除了搜索词 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 里的密码默认遮住,点“显示”才会出现。