jsoup 1.22.1 發佈,Java HTML 解析器

新聞
HongKong
1
02:39 PM · Jan 04 ,2026

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

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.