文
章
目
录
章
目
录
学会取消转义字符串中的HTML字符。下面的示例将一个HTML字符串取消转义为包含与转义对应的实际Unicode字符的字符串。
1.使用StringEscapeUtils.unescapeHtml4()
StringEscapeUtils类是Apache 公共文本库的一部分,用于从 Maven 存储库导入其最新版本。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
unescapeHtml4 ()方法:
- 将转义字符串作为参数。如果参数字符串为null则返回null。
- 支持所有已知的 HTML 4.0 实体。
- 如果一个实体未被识别,它就会被保留。
我们可以使用StringEscapeUtils.unescapeHtml4()
如下方法:
String escapedString = "<java>public static void main(String[] args) { ... }</java>";
String unEscapedHTML = StringEscapeUtils.unescapeHtml4(escapedString);
System.out.println(unEscapedHTML);
程序输出:
<java>public static void main(String[] args) { ... }</java>
2. 使用纯Java
我们可以创建自定义方法来支持其他 HTML 实体或库不支持的自定义 HTML 实体。
以下方法接受输入字符串,搜索所有 HTML 实体并在找到时对它们进行取消转义。我们可以根据需要添加或删除更多实体。
private static HashMap<String, String> htmlEntities;
static {
htmlEntities = new HashMap<String, String>();
htmlEntities.put("<", "<");
htmlEntities.put(">", ">");
htmlEntities.put("&", "&");
htmlEntities.put(""", "\"");
htmlEntities.put(" ", " ");
htmlEntities.put("©", "\u00a9");
htmlEntities.put("®", "\u00ae");
htmlEntities.put("€", "\u20a0");
}
public static final String unescapeHTML(String source) {
int i, j;
boolean continueLoop;
int skip = 0;
do {
continueLoop = false;
i = source.indexOf("&", skip);
if (i > -1) {
j = source.indexOf(";", i);
if (j > i) {
String entityToLookFor = source.substring(i, j + 1);
String value = (String) htmlEntities.get(entityToLookFor);
if (value != null) {
source = source.substring(0, i)
+ value + source.substring(j + 1);
continueLoop = true;
} else if (value == null) {
skip = i + 1;
continueLoop = true;
}
}
}
} while (continueLoop);
return source;
}
我们可以使用上述方法来取消转义HTML:
String input = "<java>public static void main(String[] args) { ... }</java>";
String output = unescapeHtml(input);
System.out.println(output);
程序输出:
<java>public static void main(String[] args) { ... }</java>