Узнайте, как раскодировать символы HTML в строке. Приведенный пример раскодирует строку HTML в строку, содержащую фактические символы Unicode, соответствующие экранированным символам.
1. Использование StringEscapeUtils.unescapeHtml4()
Класс StringEscapeUtils является частью текстовой библиотеки Apache Commons и позволяет импортировать ее последнюю версию из репозитория Maven.
<зависимость><groupId>org.apache.commons</groupId><artifactId>commons-text</artifactId><версия>1.10.0</версия></зависимость>
Метод 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>
Ссылки: