
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 项目提供支持,编号为 #14041。
API 调整
- 启动了 jsoup 1.24.1 版本中废弃 API 的移除路线图,相关接口将在后续版本中逐步淘汰。
问题修复
- 修复了
Node#replaceWith(Node)方法中未及时清除被替换节点缓存的子元素的问题,避免了后续调用Element#children()返回异常结果。#2391 - 属性选择器值现在严格按字面量比对且不再自动修剪首尾空白。此前版本会对选择器值与元素属性值同时清理空格,此行为偏离了 CSS 规范及浏览器实际表现(如
[attr=” foo “]匹配失败)。目前已完全对齐标准。#2380 - 在使用 JDK 内置的 HttpClient 时,系统级代理设置曾遭忽略。现已修正:当请求未显式指定代理时,会自动采用系统默认代理设置。#2388,#2390
- 在处理严重损坏的 HTML 输入时,“adoption agency” 算法可能抛出
ValidationException。现统一改为记录为解析警告,不断续处理流程。#2393 - 修复了 HTML 正文内的空字(U+0000)符移除逻辑不一致的问题;外部引入内容中的空字符亦未能正确转义。#2395
- 解析恶意构造的正文片段时偶发
IndexOutOfBoundsException。现捕获并将问题降级为解析错误日志,确保程序稳定性。#2397,#2406 - ……
内部调整
- 将内部辅助类
org.jsoup.internal.Functions标记为已弃用,计划于 v1.23.1 版本中彻底移除。#2412
完整更新日志请参阅:https://www.php.cn/link/adb7dc747bdd4a368293f7fd6721d6df
源码获取地址:点击下载
