Java 中的 Unescape HTML 符號
1. 概述
伺服器端應用程式有時需要解析 HTML 字元。這就是轉義/取消轉義過程有用的地方。在本教程中,我們將示範幾種在 Java 中轉義 HTML 字元的方法。我們將研究一些可以處理此任務的可用庫。
2. 取消轉義 HTML 字元的方法
在 JVM 中處理 HTML 符號可能很棘手,因為 Java 字串中的這些符號代表兩個以上的字元。例如,HTML 中的 < 或 > 字元表示為<
>
Java 中的字串。為了讓 JVM 正確解釋這些字符,我們需要一些方法來轉義或取消轉義它們。
我們總是可以自己編寫程式碼來處理非轉義的 HTML 字符,但這個過程需要時間。它也容易出錯。相反,我們可以使用可以處理該任務的可用 Java 程式庫。下面小節中的範例程式碼使用各種 Java 函式庫測試轉義 HTML 符號到「未轉義」字元的轉換。
2.1.透過 Apache Commons 的StringEscapeUtils
進行轉義
Apache Commons 是一個受歡迎的 Java 函式庫,其目標和重點是重複使用元件。它的StringEscapeUtils
類別有許多方便的方法,其中包括 org.apache.commons.text 套件中的StringEscapeUtils.unescapeHtml4()
org.apache.commons.text:
String expectedQuote = "\"Hello\" Baeldung";
String escapedQuote = ""Hello" Baeldung";
Assert.assertEquals(expectedQuote, StringEscapeUtils.unescapeHtml4(escapedQuote));
String escapedStringsWithHtmlSymbol = "<p><strong>Test sentence in bold type.</strong></p>";
String expectedStringsWithHtmlSymbol = "<p><strong>Test sentence in bold type.</strong></p>";
Assert.assertEquals(expectedStringsWithHtmlSymbol, StringEscapeUtils.unescapeHtml4(escapedStringsWithHtmlSymbol));
2.2.透過 Spring Framework 的HtmlUtils
進行轉義
Spring 框架是一個可靠的 Java 平台,為開發應用程式提供各種基礎架構支援。它提供了HtmlUtils.htmlUnescape()
函數,用於轉換轉義的 HTML 字元。它可以在套件org.springframework.web.util
下找到:
String expectedQuote = "\"Code smells\" -Martin Fowler";
String escapedQuote = ""Code smells" -Martin Fowler";
Assert.assertEquals(expectedQuote, HtmlUtils.htmlUnescape(escapedQuote));
String escapedStringsWithHtmlSymbol = "<p>Loren Ipsum is a popular paragraph.</p>";
String expectedStringsWithHtmlSymbol = "<p>Loren Ipsum is a popular paragraph.</p>";
Assert.assertEquals(expectedStringsWithHtmlSymbol, HtmlUtils.htmlUnescape(escapedStringsWithHtmlSymbol));
2.3.透過 Unbescape 的HtmlEscape
進行轉義
Unbescape程式庫用於轉義和取消轉義多種格式的數據,其中包括 HTML、JSON 和 CSS。下面的範例顯示透過HtmlEscape.unescapeHtml()
方法取消轉義 HTML 字元和標籤:
String expectedQuote = "\"Carpe diem\" -Horace";
String escapedQuote = ""Carpe diem" -Horace";
Assert.assertEquals(expectedQuote, HtmlEscape.unescapeHtml(escapedQuote));
String escapedStringsWithHtmlSymbol = "<p><em>Pizza is a famous Italian food. Duh.</em></p>";
String expectedStringsWithHtmlSymbol = "<p><em>Pizza is a famous Italian food. Duh.</em></p>";
Assert.assertEquals(expectedStringsWithHtmlSymbol, HtmlEscape.unescapeHtml(escapedStringsWithHtmlSymbol));
2.4.透過 Jsoup 的Entities.unescape()
進行轉義
Jsoup 函式庫用於各種 HTML 操作。其 Java HTML 解析器為 HTML 和 XML 需求提供廣泛的支援。 Entities.unescape()
是一個函數,其主要目標是使用轉義的 HTML 字元對字串進行轉義:
String expectedQuote = "\"Jsoup\" is another strong library";
String escapedQuote = ""Jsoup" is another strong library";
Assert.assertEquals(expectedQuote, Entities.unescape(escapedQuote));
String escapedStringsWithHtmlSymbol = "<p>It simplifies working with real-world <strong>HTML</strong> and <strong>XML</strong></p>";
String expectedStringsWithHtmlSymbol = "<p>It simplifies working with real-world <strong>HTML</strong> and <strong>XML</strong></p>";
Assert.assertEquals(expectedStringsWithHtmlSymbol, Entities.unescape(escapedStringsWithHtmlSymbol));
三、結論
在本教學中,我們示範如何使用 Java 社群可用的各種函式庫來轉義 HTML 字元。 Apache Commons 和 Spring Framework 等函式庫是受歡迎的函式庫,它們提供了用於處理 HTML 實體的各種工具。 Unbescape 和 Jsoup 不僅提供 HTML 字元的處理功能,還提供其他形式的資料格式的處理功能。當應用程式需要時,它們幫助驗證來自伺服器端的輸入。
本文中使用的所有程式碼範例都可以在 GitHub 上取得。