URL 和查询字符串
URL 与查询字符串
URL 层实现了 WHATWG 风格的解析——与浏览器的行为相同——因此从文档中提取的 URL 会以真实用户代理的方式进行解析和规范化。
解析与验证
URL.parse() 解析绝对或相对 URL;URL.can_parse() 在不构建对象的情况下判断其有效性。解析失败会抛出类型化的 URLParseError。
查询字符串
URLSearchParams 读取并编辑查询参数:append()、get()、get_all()、has() 和 delete() 覆盖整个往返过程,保持多值语义。
技巧与最佳实践
- 在过滤器中使用
can_parse()进行廉价验证;仅在需要组件时才使用parse()构造 - 记住查询键会重复 — 当参数可能出现多次时使用
get_all() - 捕获
URLParseError而不是使用正则表达式进行预验证
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| 相对 URL 解析失败 | 未提供基准 | 根据 URL.parse() 提供基准 |
| 仅返回第一个查询值 | 在重复键上使用了 get() | 使用 get_all() |
| 组件中的奇怪字符 | WHATWG 正规化在工作中 | 预期 — 这与浏览器行为相匹配 |
FAQ
解析是否遵循 WHATWG 标准?
是的 — 规范化和组件拆分镜像浏览器行为。
如何在不解析的情况下检查 URL?
URL.can_parse() 返回有效性而无需对象构造。
我可以就地编辑查询字符串吗?
是的——URLSearchParams 支持 append/get/has/delete 循环往返。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
URL.parse | 解析 URL |
URL.can_parse | 未构造的有效性检查 |
URLSearchParams.append | 添加查询参数 |
URLSearchParams.get_all | 键的所有值 |
URLParseError | 类型解析失败 |