Преобразование HTML в текст: удаление тегов и форматирования

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы трансформировать HTML в текст при помощи JavaScript, используйте атрибут textContent элемента DOM:

JS
Скопировать код
var html = "<p>Преобразуйте <em>этот</em> HTML в текст!</p>";
var temp = document.createElement("div");
temp.innerHTML = html;
var text = temp.textContent || temp.innerText || "";

Атрибут textContent удаляет из строки все HTML-теги, итоговый результат будет такой: "Преобразуйте этот HTML в текст!". Если textContent не доступен, примените innerText.

HtmlAgilityPack: надежное решение для .NET

В .NET для преобразования HTML идеально подходит библиотека HtmlAgilityPack. С помощью функции ConvertToPlainText из файла HtmlUtilities.cs можно получить текст, сохраняя базовое форматирование, например <b> или <i>. Библиотека распостираняется под лицензией MIT и представляет собой универсальный инструмент для работы с HTML.

Регулярные выражения: удобно, но опасно

Вы можете использовать регулярные выражения (Regex) для удаления тегов и пробелов из HTML. Но стоит быть внимательными, так как в сложных ситуациях регулярные выражения могут работать некорректно.

csharp
Скопировать код
// Вот так можно убрать нежелательные HTML-теги. Просто и эффективно.
var plainText = Regex.Replace(htmlContent, "<.*?>", String.Empty);

// А таким образом можно заменить "&nbsp;" на стандартные пробелы.
plainText = Regex.Replace(plainText, "&nbsp;", " ");

Применение Regex вполне подходит для простых задач, но для масштабных проектов может быть непригодно.

Безопасность при работе с HTML, которым оперируют пользователи

При работе с HTML, введенным пользователем, безопаснось имеет первостепенное значение. HtmlAgilityPack предотвращает XSS-атаки и помогает поддерживать целостность данных при помощи методов, таких как WebUtility.HtmlDecode для декодирования сущностей.

Не забывайте о тестировании: разнообразие HTML-контента

Важно проводить испытания функций преобразования с использованием разностороннего HTML-контента. Ясные комментарии в коде помогут другим разработчикам понять, как правильно пользоваться этими функциями.

Производительность: выбор между HtmlAgilityPack и Regex

Выбор между применением HtmlAgilityPack и Regex влияет на удобство из использования и скорость выполнения. Regex хорошо работает с простыми HTML и в условиях, где производительность играет ключевую роль. Для решения более сложных задач стоит предпочесть HtmlAgilityPack.

Визуализация

Теги в HTML:

Markdown
Скопировать код
HTML: <h1>Привет</h1><p>Мир!</p>

Простой текст после преобразования выглядит так:

plaintext
Скопировать код
Текст: Привет Мир!

Это схоже с возвращением к исходным данным без избыточности.

Продвинутые способы преобразования HTML в текст

Декодирование закодированных значений

HTML использует сущности, которые следует декодировать в исходные символы. В этом поможет WebUtility.HtmlDecode:

csharp
Скопировать код
// Преобразуем закодированные символы в исходные. Без тайн и шифров.
var decodedText = WebUtility.HtmlDecode(plainText);

Извлечение всех текстовых узлов

Для списков и таблиц может потребоваться дополнительный анализ. Вы должны проходить через и объединять текстовые узлы, чтобы правильно расставить приоритеты чтения. HtmlAgilityPack предлагает такие возможности.

Нормализация текста для улучшения читаемости

После преобразования текст может включать в себя излишнее количество пробелов и переходов на новую строку. Удаление лишних пробелов и нормализация текста повысит его читаемость. Это можно сравнить с уборкой после шумного вечера:

csharp
Скопировать код
// "Бегите, пробелы!" – избавляемся от излишних пробелов.
plainText = Regex.Replace(plainText, @"\s+", " ").Trim();

Полезные материалы

  1. Node: textContent property – Web APIs | MDN — освежите свои знания о разнице между innerText и textContent.
  2. Strip HTML tags from text using plain JavaScript – Stack Overflow — подробнее о том, как извлекать текст из HTML в JavaScript.
  3. jsoup: Java HTML parser, built for HTML editing, cleaning, scraping, and XSS safety — сильный инструмент для парсинга и очистки HTML в Java.
  4. Beautiful Soup: We called him Tortoise because he taught us. — инструмент на Python для анализа и извлечения данных из HTML и XML файлов.
  5. HTML Standard — изучите официальные стандарты структуры HTML и правил его парсинга.
  6. HTML Purifier – Filter your HTML the standards-compliant way! — очистите HTML и подготовьте его к преобразованию в простой текст при помощи этого инструмента.