
jsoup 1.22.1 已正式发布,本次更新引入了对 re2j 正则表达式引擎的支持(专用于正则驱动的 CSS 选择器)、可自定义的最大解析深度设置,并包含多项缺陷修复与功能优化。
功能增强
- 新增对
re2j正则引擎的支持,适用于基于正则的 CSS 选择器语法(如[attr~=regex]、:matches(regex)),显著提升处理用户输入正则表达式的安全性。启用方式:将com.google.re2j添加至类路径,例如:
若类路径中已存在该依赖但希望回退至 Java 原生正则引擎,可通过 System.setProperty("jsoup.useRe2j", "false") 显式禁用;调用 Regex.usingRe2j() 可验证 re2j 是否已成功激活。#2407
- 新增实例方法
Parser#unescape(String, boolean),利用当前解析器配置执行 HTML 实体解码(例如支持错误定位),作为已有静态工具方法Parser.unescapeEntities(String, boolean)的补充实现。#2396 - HTML 与 XML 解析器均支持配置最大解析嵌套深度(限制栈中活跃元素数量)。HTML 解析器默认深度设为 512,以对齐主流浏览器行为并防范栈溢出风险;XML 解析器默认不限制深度,但可通过
Parser.setMaxDepth()手动设定上限。#2421 - 构建流程升级:CI 环境新增 JDK 25 兼容性测试覆盖。#2403
- 构建流程升级:在原有完整 HTML/XML 模糊测试基础上,新增针对上下文片段解析的模糊测试模块(由 oss-fuzz 提供支持,ID: #14041)。
API 变更
立即学习“Java免费学习笔记(深入)”;
- 启动 jsoup 1.24.1 版本中废弃 API 的移除路线图,相关接口将在后续版本中逐步淘汰。
问题修复
- 修复
Node#replaceWith(Node)方法中未及时清除被替换节点缓存子元素的问题,避免后续调用Element#children()返回异常结果。#2391 - 属性选择器值现严格按字面量比对且不再自动裁剪首尾空白。此前版本会同时清理选择器值与元素属性值中的空格,导致行为偏离 CSS 规范及浏览器实际表现(如
[attr=" foo "]匹配失败)。现已完全对齐标准。#2380 - 使用 JDK 内置 HttpClient 时,系统级代理(
ProxySelector.getDefault())曾被忽略。现已修正:当请求未显式指定代理时,自动采用系统默认代理设置。#2388,#2390 - “adoption agency” 算法在面对严重损坏 HTML 输入时可能抛出
ValidationException。现改为统一记录为解析警告,不中断处理流程。#2393 - HTML 正文内空字符(U+0000)移除逻辑不一致;外部引入内容中的空字符亦未能正确转义。此问题已修复。#2395
- 解析恶意构造的正文片段时偶发
IndexOutOfBoundsException。现捕获并降级为解析错误日志,保障稳定性。#2397,#2406 - ……
内部调整
- 标记内部辅助类
org.jsoup.internal.Functions为已弃用,计划于 v1.23.1 中彻底移除。#2412
完整更新日志请参阅:https://www.php.cn/link/adb7dc747bdd4a368293f7fd6721d6df
源码获取地址:点击下载











