Java中轉義HTML符號的四種方法

banq發表於2024-07-16

伺服器端應用程式有時需要解析 HTML 字元。這時轉義/取消轉義(Unescape)過程就派上用場了。在本教程中,我們將演示幾種在 Java 中取消轉義 HTML 字元的方法。我們將研究一些可以處理此任務的可用庫。

在 JVM 中處理 HTML 符號可能比較棘手,因為 Java 字串中的這些符號代表兩個或多個字元。為了讓 JVM 正確解釋這些字元,我們需要對它們進行轉義或取消轉義的方法。

我們總是可以自己編寫程式碼來處理未轉義的 HTML 字元,但這個過程會花費時間。它也容易出錯。相反,我們可以使用可以處理該任務的現有 Java 庫。以下小節中的示例程式碼測試了使用各種 Java 庫將轉義的 HTML 符號轉換為“未轉義”字元。

1. 透過 Apache Commons 的StringEscapeUtils解除轉義
Apache Commons是一個流行的 Java 庫,其目標和重點是重用元件。它的StringEscapeUtils類有許多方便的方法,其中包括

org.apache.commons.text包中的StringEscapeUtils.unescapeHtml4() :

String expectedQuote = <font>"\&#34Hello\&#34 Baeldung";
String escapedQuote =
"&quot;Hello&quot; 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. 透過 Spring Framework 的HtmlUtils解除轉義
Spring Framework 是一個可靠的 Java 平臺,具有開發應用程式的各種基礎設施支援。它提供了 HtmlUtils.htmlUnescape()函式,用於轉換轉義的 HTML 字元。它可以在org.springframework.web.util包下找到:

String expectedQuote = <font>"\&#34Code smells\&#34 -Martin Fowler";
String escapedQuote =
"&quot;Code smells&quot; -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));


3.透過 Unbescape 的HtmlEscape進行轉義
Unbescape庫用於轉義和取消轉義多種格式的資料,其中包括 HTML、JSON 和 CSS。以下示例顯示瞭如何透過 HtmlEscape.unescapeHtml() 方法取消轉義 HTML 字元 和標籤:

String expectedQuote = <font>"\&#34Carpe diem\&#34 -Horace";
String escapedQuote =
"&quot;Carpe diem&quot; -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));


4. 透過 Jsoup 的Entities.unescape()解除轉義
Jsoup庫適用於各種 HTML 操作。其 Java HTML 解析器為 HTML 和 XML 需求提供了廣泛的支援。Entities.unescape ()是一個函式,其主要目標是對帶有轉義 HTML 字元的字串進行反轉義:

String expectedQuote = <font>"\&#34Jsoup\&#34 is another strong library";
String escapedQuote =
"&quot;Jsoup&quot; 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));

 

相關文章