Java中转义HTML符号的四种方法

服务器端应用程序有时需要解析 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 = "\"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. 通过 Spring Framework 的HtmlUtils解除转义
Spring Framework 是一个可靠的 Java 平台,具有开发应用程序的各种基础设施支持。它提供了 HtmlUtils.htmlUnescape()函数,用于转换转义的 HTML 字符。它可以在org.springframework.web.util包下找到:

String expectedQuote = "\"Code smells\" -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 = "\"Carpe diem\" -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 = "\"Jsoup\" 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));