URL解析

把网址粘进来,本页按标准部件拆开:协议、主机、端口、路径、查询串与哈希,参数还会逐个解码还原。

解析结果
序号协议主机端口路径参数数哈希

端口一栏写「(默认)」表示原网址没有显式写端口,浏览器会按协议补全:https 补 443,http 补 80。

使用方法

URL解析把一条网址拆成能逐个核对的部件,四步:

  1. 在文本框里贴入网址,一行一条,演示已预填两条。
  2. 按 Ctrl / Cmd + Enter 触发解析(文本框里 Enter 留给换行,不触发)。
  3. 结果表逐行给出协议、主机、端口、路径、参数数与哈希。
  4. 点「复制结果」把整张表复制成制表符文本,或看下方详情区里解码后的参数。

某一行解析失败时,详情区会写明是第几行、什么问题,其余行照常出结果,不会整批中断。

URL解析能解决什么

它解决的是一件很具体的事:拿到一条又长又乱的网址,想快速看清它到底访问谁、带了什么参数。三类场景最常见:

  • 排查跳转:营销链接展开后带了一串 utm_* 参数,本页逐个列出来,看是哪个渠道带来的。
  • 核对接口:把接口地址粘进来,确认路径拼对了、参数没漏。
  • 看编码:中文参数在网址里变成百分号串,本页直接还原成可读文本。

它不做三件事:不发起请求(只做字符串拆解,不会访问该网址)、不判断网址是否安全、不做短链展开——那需要联网,本页坚持离线。

原理和变量

① 按什么规则拆:采用标准里的通用语法 协议 :// 主机 : 端口 / 路径 ? 查询串 # 哈希。协议后面一定是冒号加两条斜杠,查询串从第一个问号开始,哈希从第一个井号开始。

② 参数是怎么读出来的:用浏览器内置的 URLSearchParams 逐对读取,键与值都会做百分号解码,所以 %E5%B7%A5%E5%85%B7 会还原成「工具」。

③ 加号到底是加号还是空格:在查询串里,加号按惯例表示空格,q=hello+world 解出来是 hello world;但在路径里加号就是加号,/a+b/ 不会被当空格。这个差别是新手最容易踩的坑。

④ 输入怎么变成输出:以 https://www.liuquan.net/jisuanqi/bmijisuanqi/?h=175&w=70&unit=cm 为例,拆出协议 https、主机 www.liuquan.net、端口未写按默认 443、路径 /jisuanqi/bmijisuanqi/、参数 3 个(h=175、w=70、unit=cm)、无哈希。

⑤ 边界与校验:文本框为空直接提示;某一行不是合法网址,详情区写明「第 N 行无法解析」并跳过,其余行照常出结果;协议要写全(带 ://)才能被识别,只写 www.example.com 会因缺少协议而报错。

⑥ 常见误用:一是把 %20 与加号当成完全等价,其实只在查询串里才等价;二是以为端口一栏留空就是没端口,浏览器会按协议补默认值;三是把相对地址当完整网址提交,缺少协议必然解析失败。

完整示例

演示输入两条网址,解析结果如下:

  • 第 1 条 https://www.liuquan.net/jisuanqi/bmijisuanqi/?h=175&w=70&unit=cm:协议 https,主机 www.liuquan.net,端口默认 443,路径 /jisuanqi/bmijisuanqi/,参数 3 个(h=175、w=70、unit=cm),无哈希。
  • 第 2 条 https://shop.example.com:8443/a/b/c.html?q=%E4%B8%AD%E6%96%87%20space&page=2#sec:协议 https,主机 shop.example.com,端口 8443(非默认所以保留),路径 /a/b/c.html,参数 2 个,哈希 #sec。

第 2 条的 q 参数解码后是「中文 space」。原文 9 个字符,编码成百分号串后变成 %E4%B8%AD%E6%96%87%20space,共 26 个字符——一个汉字占 3 字节、写成 9 个字符,空格被写成 %20 三个字符。同理,「工具」两个字编码后是 %E5%B7%A5%E5%85%B7,18 个字符。

输入范围与对照表

下表列出 18 种常见 URL 形态的部件拆解,前 12 行直接展开,余下 6 行点「加载更多」:

常见 URL 形态的部件拆解(前 12 行展开,余下 6 行点「加载更多」)
URL协议主机端口路径参数数
https://www.liuquan.net/jisuanqi/bmijisuanqi/?h=175&w=70&unit=cmhttpswww.liuquan.net(默认 443)/jisuanqi/bmijisuanqi/3
https://shop.example.com:8443/a/b/c.html?q=…&page=2#sechttpsshop.example.com8443/a/b/c.html2
http://user:pw@10.0.0.1:8080/path/to/item?id=42&ref=homehttp10.0.0.18080/path/to/item2
https://search.example.com/?keyword=%E5%B7%A5%E5%85%B7&sort=desc&n=20httpssearch.example.com(默认 443)/3
https://a.b.c.example.com/x/y/z?utm_source=qq&utm_medium=chat&utm_campaign=springhttpsa.b.c.example.com(默认 443)/x/y/z3
https://cdn.example.com/img/photo.jpg?v=3httpscdn.example.com(默认 443)/img/photo.jpg1
https://example.com/httpsexample.com(默认 443)/0
https://example.com:443/secure?a=1httpsexample.com(默认 443)/secure1
https://example.com/path?empty=&flag&name=%2Bplushttpsexample.com(默认 443)/path3
mailto:someone@example.com?subject=%E4%BD%A0%E5%A5%BDmailto(无主机)(无)someone@example.com1
https://xn--fiqs8s.example.com/%E4%B8%AD%E6%96%87httpsxn--fiqs8s.example.com(默认 443)/%E4%B8%AD%E6%96%870
https://example.com/api/v1/users/42/orders?limit=50&offset=100httpsexample.com(默认 443)/api/v1/users/42/orders2

输入范围:一次最多解析 20 行;每行不超过 2000 个字符。协议栏常见值为 https、http、ftp、mailto、tel 五种;无主机的协议(如 mailto、tel)主机栏写「(无主机)」。端口一栏只有在原网址显式写出时才会显示数字。

结果边界和舍入

三条边界:

  • 不联网:本页不访问你贴的网址,只做字符串拆解。因此短链不会展开,重定向也不会跟随,看到的始终是你贴进来的原文。
  • 端口默认值只是显示:标「(默认 443)」是按协议推断的,原网址里其实没有这段,复制结果时一并输出以便阅读。
  • 解码只做一层:参数被编码两次时(例如 %2520)只会解一层,得到 %20。要完全还原需要再解一次,本页不自动递归,避免歧义。

常见问题

为什么只写域名会报错?

协议是拆解的起点。只写 www.example.com 缺少协议头,页面会提示补上 https:// 再试。

查询串里的加号算空格吗?

在查询串里算空格,q=hello+world 解出来是 hello world;在路径里加号就是加号,不会被当空格。

端口一栏的「(默认)」是什么意思?

表示原网址没显式写端口,浏览器按协议补全:https 补 443,http 补 80。写出非默认端口(如 8443)时会原样保留。

中文参数为什么变成百分号?

网址只能直接用 ASCII 字符,中文要按 UTF-8 逐字节转成百分号编码。一个汉字 3 字节,写成 9 个字符,本页会还原回中文。

会访问我贴的网址吗?

不会。全部在浏览器里做字符串拆解,不发起任何网络请求,短链也不会被展开。

能一次解析多条吗?

能。一行一条,最多 20 行;某行失败只跳过那一行,其余照常出结果。

为什么解出来还有百分号?

说明参数被编码了两层(例如 %2520)。本页只解一层,得到 %20;再解一次才是空格。

结果能导出吗?

能。点「复制结果」拿到制表符文本,粘进表格软件自动分列;下方对照表也能导出 CSV。

相关工具