jsoup 1.22.1 現已發佈,新增了對re2j正則表達式引擎的支持(用於基於正則表達式的 CSS 選擇器),可配置的最大解析深度,以及大量錯誤修復和改進。
改進
- 新增了對
re2j正則表達式引擎的支持,用於基於正則表達式的 CSS 選擇器((例如[attr~=regex],:matches(regex))。這使得處理用户提供的任意查詢正則表達式更加安全。要啓用此功能,將com.google.re2j依賴項添加到類路徑中,例如:
<dependency> <groupId>com.google.re2j</groupId> <artifactId>re2j</artifactId> <version>1.8</version> </dependency>
(如果你的類路徑中已經包含了該依賴項,但仍然想使用 Java 正則表達式引擎,可以通過System.setProperty("jsoup.useRe2j", "false")禁用 re2j 。)可以通過調用Regex.usingRe2j()來確認 re2j 引擎是否已正確啓用。#2407
- 新增了一個實例方法
Parser#unescape(String, boolean),該方法使用解析器的配置來解轉義 HTML 實體(例如,為了支持錯誤跟蹤),作為現有靜態實用程序Parser.unescapeEntities(String, boolean)的補充。#2396 - 為 HTML 和 XML 解析器都添加了可配置的最大解析深度(用於限制堆棧中打開的元素數量)。HTML 解析器的默認深度現在為 512,以匹配瀏覽器行為並防止堆棧無限增長;XML 解析器默認保持無限制深度,但可以通過
Parser.setMaxDepth()選擇限制深度。#2421 - Build:添加了對 JDK 25 的 CI coverage #2403
- Build:新增了用於上下文片段解析的 CI 模糊測試器(除了現有的完整 HTML 和 XML 模糊測試器之外)。oss -fuzz #14041
變化
- 為之前已棄用的 API 制定 jsoup 1.24.1 的移除計劃。
錯誤修復
- 先前在
Node#replaceWith(Node)中未正確失效元素的緩存子元素,可能導致後續調用Element#children()時出現錯誤結果。#2391 - 屬性選擇器值現採用字面比較且不進行修剪。此前 jsoup 會從選擇器值及元素屬性值中去除空格,這可能導致與瀏覽器行為不一致(例如
[attr=" foo "])。現已與 CSS 規範及瀏覽器引擎保持一致。#2380 - 使用 JDK HttpClient 時,系統默認代理
ProxySelector.getDefault()會被忽略。現已修正:若未設置請求級代理,則使用系統代理。#2388,#2390 - adoption agency 算法在處理嚴重損壞的輸入時可能拋出
ValidationException。現已改為記錄為解析錯誤。#2393 - HTML 正文中的空字符未被一致地移除;外部內容中的空字符也未正確替換。#2395
- 解析經過構造的正文片段時可能拋出
IndexOutOfBoundsException異常。現改為記錄為解析錯誤。 #2397,#2406 - ……
Internal Changes
- 已棄用的內部輔助函數
org.jsoup.internal.Functions(將在 v1.23.1 版本中移除)。#2412
詳情可查看更新説明:https://jsoup.org/news/release-1.22.1