Как отменить экранирование HTML в Java

Узнайте, как раскодировать символы 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>

Ссылки:

Исходный код на Github

Прокрутить вверх