Как с помощью ASP.NET надежно удалить теги HTML из заданной строки (т. Е. Без использования регулярного выражения)? Я ищу что-то вроде PHP strip_tags
.
Пример:
<ul><li>Hello</li></ul>
Вывод:
"Привет"
Я стараюсь не изобретать велосипед, но пока не нашел ничего, что соответствовало бы моим потребностям.
Ответы:
Если он просто удаляет все теги HTML из строки, это
надежноработает и с регулярным выражением. Заменить:с пустой строкой глобально. Не забудьте потом нормализовать строку, заменив:
с одним пробелом и обрезкой результата. При желании замените любые объекты символов HTML на фактические символы.
Примечание :
>
значения атрибутов. Это решение будет возвращать сломанную разметку при столкновении с таких значений.источник
"e;
. Я совмещаю его сWebUtility.HtmlDecode
тем (который, в свою очередь, не удаляет теги). Используйте его после удаления тега, так как он может перезаписать>
и<
. НапримерWebUtility.HtmlDecode(Regex.Replace(myTextVariable, "<[^>]*(>|$)", string.Empty))
Скачайте HTMLAgilityPack прямо сейчас! ;) Скачать LInk
Это позволяет загружать и анализировать HTML. Затем вы можете перемещаться по DOM и извлекать внутренние значения всех атрибутов. Серьезно, это займет максимум 10 строк кода. Это одна из лучших бесплатных библиотек .net.
Вот образец:
источник
text()
узел, обрезать содержимое и строку. Присоединяйтесь к тем, у которых есть пробел.IEnumerable<string> allText = doc.DocumentNode.SelectNodes("//text()").Select(n => n.InnerText.Trim())
if (doc == null)
чек? Это всегда ложь, не так ли?источник
RegexOptions.SingleLine
.источник
Я разместил это на форумах asp.net, и это все еще кажется одним из самых простых решений. Я не могу гарантировать, что это самый быстрый или самый эффективный, но он довольно надежный. В .NET вы можете использовать сами объекты HTML Web Control. Все, что вам действительно нужно сделать, это вставить строку во временный объект HTML, такой как DIV, а затем использовать встроенный «InnerText», чтобы захватить весь текст, который не содержится в тегах. Ниже приведен простой пример C #:
источник
Я написал довольно быстрый метод на C #, который чертовски превосходит Regex. Он размещен в статье на CodeProject.
Среди его преимуществ - более высокая производительность, а также возможность заменять именованные и нумерованные объекты HTML (например,
&amp;
и&203;
), замену блоков комментариев и многое другое.Прочтите соответствующую статью о CodeProject .
Спасибо.
источник
Для тех из вас, кто не может использовать HtmlAgilityPack, вариант чтения XML .NETs. Это может привести к сбою в хорошо отформатированном HTML, поэтому всегда добавляйте уловку с regx в качестве резервной копии. Обратите внимание, что это НЕ быстро, но дает прекрасную возможность для отладки старой школы.
источник
источник
Для тех, кто жалуется на то, что решение Майкла Типтопа не работает, вот способ .Net4 + сделать это:
источник
источник
Я просмотрел предлагаемые здесь решения на основе Regex, и они не внушают мне никакой уверенности, за исключением самых тривиальных случаев. Угловая скобка в атрибуте - это все, что нужно для взлома, не говоря уже о искаженном HTML из дикой природы. А как насчет таких сущностей, как
&
? Если вы хотите преобразовать HTML в простой текст, вам также необходимо декодировать объекты.Поэтому я предлагаю способ ниже.
Используя HtmlAgilityPack , этот метод расширения эффективно удаляет все HTML-теги из html-фрагмента. Также декодирует объекты HTML, такие как
&
. Возвращает только внутренние текстовые элементы с новой строкой между каждым текстовым элементом.Если вы действительно серьезно, вы хотите игнорировать содержимое определенного HTML тегов тоже (
<script>
,<style>
,<svg>
,<head>
,<object>
приходят на ум!) , Потому что они , вероятно , не содержат читаемое содержание в том смысле , мы после. То, что вы там будете делать, будет зависеть от ваших обстоятельств и того, как далеко вы хотите зайти, но с помощью HtmlAgilityPack было бы довольно тривиально занести в белый или черный список выбранные теги.Если вы визуализируете контент обратно на HTML-страницу, убедитесь, что вы понимаете уязвимость XSS и способы ее предотвращения - т.е. всегда кодируйте любой введенный пользователем текст, который отображается обратно на HTML-страницу (
>
становится и>
т. Д.).источник
Для второго параметра, то есть для сохранения некоторых тегов, вам может понадобиться такой код, используя HTMLagilityPack:
Дополнительные объяснения на этой странице: http://nalgorithm.com/2015/11/20/strip-html-tags-of-an-html-in-c-strip_html-php-equivalent/
источник
Вы также можете сделать это с помощью AngleSharp, который является альтернативой HtmlAgilityPack (не то чтобы HAP - это плохо). Его проще использовать, чем HAP, чтобы получить текст из источника HTML.
Вы можете взглянуть на раздел, посвященный ключевым функциям, где они утверждают, что они «лучше», чем HAP. Я думаю, что по большей части это, вероятно, перебор для текущего вопроса, но все же это интересная альтернатива.
источник
Просто используйте
string.StripHTML();
источник