Удаление HTML тегов из строки в ASP.NET без регулярок

Пройдите тест, узнайте какой профессии подходите

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

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

Чтобы удалить HTML-теги, примените поистине волшебный метод Regex.Replace в ASP.NET:

csharp
Скопировать код
string cleanText = Regex.Replace(dirtyHtml, "<[^>]+>", string.Empty);

Таинственная последовательность <[^>]+> нейтрализует все HTML-теги, а string.Empty уберёт их из поля зрения, оставив перед нами лишь чистый текст.

Кинга Идем в IT: пошаговый план для смены профессии

Границы возможностей regex при удалении HTML-тегов

Впрочем, нужно говорить правду: Regex, хоть и эффективен, но не лишён слабых сторон. Он испытывает затруднения при работе с упрямыми HTML-сущностями и вложенными тегами. Если в атрибутах он встречает ">", то теряет нить разбора. Так что, если вам нужен действительно надёжный и безопасный способ удаления тегов, рассмотрите использование инструмента HtmlAgilityPack.

Использование HtmlAgilityPack для надёжного анализа HTML

HtmlAgilityPack — это мощная библиотека .NET, справляющаяся с HTML как истинный эксперт. Процесс удаления тегов с её помощью выглядит лаконично и просто. Следуйте этим шагам:

  1. Добавьте HtmlAgilityPack через NuGet — это что-то вроде конфетного магазина для .NET-фреймворка.
  2. Загрузите HTML в объект HtmlDocument, как будто вы вскрываете сейф с драгоценностями.
  3. Воспользуйтесь свойством InnerText, чтобы извлечь текст, исключив все теги.

Выглядеть в коде это будет так:

csharp
Скопировать код
var htmlDoc = new HtmlAgilityPack.HtmlDocument();  // Волшебный пергамент
htmlDoc.LoadHtml(dirtyHtml);  // Наглаву высыпаем HTML!
string cleanText = htmlDoc.DocumentNode.InnerText; // Вот она — драгоценная чистота

Преобразование старых HTML-сущностей

Даже без тегов HTML по-прежнему уважает свои HTML-сущности типа &amp;. Чтобы вернуть их к исходным символам, используйте HttpUtility.HtmlDecode:

csharp
Скопировать код
cleanText = HttpUtility.HtmlDecode(cleanText);  // Вуаля!

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

Представьте HTML-теги как этикетки на товарах в магазине:

Markdown
Скопировать код
До: 🍎<a>, 🍌<div>, 🍇<span>, 🥝<p>

С помощью .Replace() мы будем снимать эти этикетки:

Markdown
Скопировать код
🍎<a>.Replace("<a>", "").Replace("</a>", "") // Чистый 🍎 без ярлыков
🍌<div>.Replace("<div>", "").Replace("</div>", "") // Не осталось следов от 🍌-этикетки

После этой процедуры наша корзина будет наполнена лишь сущностью – фруктами:

Markdown
Скопировать код
После: 🍎, 🍌, 🍇, 🥝

На что стоит всегда обращать внимание, используя regex и HtmlAgilityPack

  • Производительность: На фоне парсеров regex работает как улитка в гонке с леопардом; последний легко выигрывает в скорости, особенно при работе с большими объёмами данных.
  • Безопасность превыше всего: Использование regex, подобно обращению с оружием, требует глубоких знаний и осторожности, иначе можно вызвать уязвимости в системе.
  • Чистота и аккуратность кода: Работать с regex иногда похоже на попытку навести порядок в заброшенной комнате. В то время как HtmlAgilityPack – это профессиональная команда уборщиков, которая всегда поддерживает безупречную чистоту и структурированность вашего кода.
  • Будьте готовы к неожиданностям: Скрипты, комментарии, секции CDATA и редкостные исключения могут зайти вас в тупик при использовании regex. HtmlAgilityPack справится с такими ситуациями с лёгкостью.

HtmlAgilityPack против regex

Хотя regex может складываться простым решением для быстрых задач, парсеры типа HtmlAgilityPack обеспечивают более высокую надёжность и удобство поддержки:

  • Расширенные возможности работы со сложными структурами HTML.
  • Повышенная производительность при обработке больших или сложных HTML-документов.
  • Избежание ошибочных интерпретаций содержимого внутри атрибутов.

Чек-лист для удаления HTML-тегов

  1. Санация: Перед началом работы предварительно очистите входные данные от пользователей, ведь это основа вашего кода.
  2. Нормализация: Важно нормализовать пробелы и удалять лишнее после удаления тегов.
  3. Декодирование: Преобразуйте HTML-сущности назад в их оригинальные символы.
  4. Тестирование: Вы никогда не узнаете точно, что может помешать работе вашей функции, поэтому протестируйте её на самых разнообразных и запутанных входных данных.

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

  1. Метод HttpUtility.HtmlDecode (System.Web) | Microsoft Learn – официальная документация Microsoft, где подробно разъясняются принципы декодирования HTML.
  2. Использование C# регулярных выражений для удаления HTML-тегов – Stack Overflow – обсуждение преимуществ и рисков, связанных с использованием регулярных выражений для этой задачи.
  3. Быстрая замена токенов в C# – CodeProject – как адаптировать метод быстрой замены токенов для удаления HTML-тегов.
  4. Каталог NuGet | HtmlAgilityPack 1.11.58 – HtmlAgilityPack в NuGet для анализа и манипуляции HTML-данными.
  5. c# – HTML agility pack – removing unwanted tags without removing content? – Stack Overflow – пример использования HtmlAgilityPack для удаления нежелательных HTML-тегов.
  6. Какие символы нужно экранировать в HTML? – Stack Overflow – руководство по кодированию и экранированию символов в HTML.
  7. Репозиторий регулярных выражений OWASP | Фонд OWASP – рекомендации OWASP по защите от XSS-атак и безопасной очистке HTML.