使用方法
URL解析把一条网址拆成能逐个核对的部件,四步:
- 在文本框里贴入网址,一行一条,演示已预填两条。
- 按 Ctrl / Cmd + Enter 触发解析(文本框里 Enter 留给换行,不触发)。
- 结果表逐行给出协议、主机、端口、路径、参数数与哈希。
- 点「复制结果」把整张表复制成制表符文本,或看下方详情区里解码后的参数。
某一行解析失败时,详情区会写明是第几行、什么问题,其余行照常出结果,不会整批中断。
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 | 协议 | 主机 | 端口 | 路径 | 参数数 |
|---|---|---|---|---|---|
| https://www.liuquan.net/jisuanqi/bmijisuanqi/?h=175&w=70&unit=cm | https | www.liuquan.net | (默认 443) | /jisuanqi/bmijisuanqi/ | 3 |
| https://shop.example.com:8443/a/b/c.html?q=…&page=2#sec | https | shop.example.com | 8443 | /a/b/c.html | 2 |
| http://user:pw@10.0.0.1:8080/path/to/item?id=42&ref=home | http | 10.0.0.1 | 8080 | /path/to/item | 2 |
| https://search.example.com/?keyword=%E5%B7%A5%E5%85%B7&sort=desc&n=20 | https | search.example.com | (默认 443) | / | 3 |
| https://a.b.c.example.com/x/y/z?utm_source=qq&utm_medium=chat&utm_campaign=spring | https | a.b.c.example.com | (默认 443) | /x/y/z | 3 |
| https://cdn.example.com/img/photo.jpg?v=3 | https | cdn.example.com | (默认 443) | /img/photo.jpg | 1 |
| https://example.com/ | https | example.com | (默认 443) | / | 0 |
| https://example.com:443/secure?a=1 | https | example.com | (默认 443) | /secure | 1 |
| https://example.com/path?empty=&flag&name=%2Bplus | https | example.com | (默认 443) | /path | 3 |
| mailto:someone@example.com?subject=%E4%BD%A0%E5%A5%BD | mailto | (无主机) | (无) | someone@example.com | 1 |
| https://xn--fiqs8s.example.com/%E4%B8%AD%E6%96%87 | https | xn--fiqs8s.example.com | (默认 443) | /%E4%B8%AD%E6%96%87 | 0 |
| https://example.com/api/v1/users/42/orders?limit=50&offset=100 | https | example.com | (默认 443) | /api/v1/users/42/orders | 2 |
| https://example.com/search?q=hello+world&safe=active | https | example.com | (默认 443) | /search | 2 |
| ftp://files.example.com/pub/data.zip | ftp | files.example.com | (默认 21) | /pub/data.zip | 0 |
| https://example.com/a%20b/c?x=1&y=2&z=3#top | https | example.com | (默认 443) | /a%20b/c | 3 |
| tel:+8613800138000 | tel | (无主机) | (无) | +8613800138000 | 0 |
| https://example.com/?a=%26%3D%3F&b=plain | https | example.com | (默认 443) | / | 2 |
| https://example.com/docs/readme.md#section-3 | https | example.com | (默认 443) | /docs/readme.md | 0 |
输入范围:一次最多解析 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。