Как я могу разделить HTML-тэги от строки в ASP.NET?

Оказалось, мне нужен Babel-polyfill

122
задан Rami Shareef 9 January 2012 в 09:13
поделиться

7 ответов

Если оно просто удаляет все HTML теги из строки, это надежно работает и с регулярным выражением. Замените:

<[^>]*(>|$)

пустой строкой, глобально. Не забудьте потом нормализовать строку, заменив:

[\s\r\n]+

одним пробелом и обрезав результат. При необходимости замените любые символьные объекты HTML обратно на фактические символы.

Примечание :

  1. Существует ограничение: HTML и XML допускают > в значениях атрибутов. Это решение будет возвращать возвращенную сломанную разметку при обнаружении таких значений.
  2. Решение технически безопасно, как в: Результат никогда не будет содержать ничего, что можно было бы использовать для межсайтового скриптинга или для разрыва макета страницы. , Это не очень чисто.
  3. Как и во всех вещах HTML и регулярных выражений:
    Используйте правильный синтаксический анализатор , если вы должны сделать это правильно при любых обстоятельствах.
110
ответ дан 24 November 2019 в 01:23
поделиться

Я написал довольно быстрый метод на c #, который превосходит Regex. Он размещен в статье на CodeProject.

Его преимущества, среди лучшей производительности, - возможность заменять именованные и пронумерованные сущности HTML (такие как & amp; amp; и . ] & 203; ) и замена блоков комментариев и т. Д.

Прочтите соответствующую статью по CodeProject .

Спасибо.

5
ответ дан 24 November 2019 в 01:23
поделиться
Regex.Replace(htmlText, "<.*?>", string.Empty);
64
ответ дан 24 November 2019 в 01:23
поделиться

Можно также сделать это с AngleSharp, который является альтернативой HtmlAgilityPack (не, что HAP плох). Легче использовать, чем HAP для вытаскивания текста из источника HTML.

var parser = new HtmlParser();
var htmlDocument = parser.ParseDocument(source);
var text = htmlDocument.Body.Text();

можно смотреть на эти основные характеристики раздел, где они излагают доводы будучи "лучше", чем HAP. Я думаю по большей части, это - вероятно, излишество для текущего вопроса, но тем не менее, это - интересная альтернатива.

0
ответ дан 24 November 2019 в 01:23
поделиться
string result = Regex.Replace(anytext, @"<(.|\n)*?>", string.Empty);
3
ответ дан 24 November 2019 в 01:23
поделиться

Скачайте HTMLAgilityPack прямо сейчас! ;) Загрузить LInk

Это позволяет загружать и анализировать HTML. Затем вы можете перемещаться по DOM и извлекать внутренние значения всех атрибутов. Серьезно, вам потребуется максимум 10 строк кода. Это одна из лучших бесплатных библиотек .net.

Вот пример:

            string htmlContents = new System.IO.StreamReader(resultsStream,Encoding.UTF8,true).ReadToEnd();

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(htmlContents);
            if (doc == null) return null;

            string output = "";
            foreach (var node in doc.DocumentNode.ChildNodes)
            {
                output += node.InnerText;
            }
74
ответ дан 24 November 2019 в 01:23
поделиться

Я разместил это на asp Форумы .net, и это до сих пор кажется одним из самых простых решений. Я не могу гарантировать, что это самый быстрый или самый эффективный, но он довольно надежный. В .NET вы можете использовать сами объекты HTML Web Control. Все, что вам действительно нужно сделать, это вставить строку во временный объект HTML, такой как DIV, а затем использовать встроенный «InnerText» для захвата всего текста, который не содержится в тегах. Ниже приведен простой пример C #:


System.Web.UI.HtmlControls.HtmlGenericControl htmlDiv = new System.Web.UI.HtmlControls.HtmlGenericControl("div");
htmlDiv.InnerHtml = htmlString;
String plainText = htmlDiv.InnerText;
6
ответ дан 24 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: