Как я могу удалить HTML из текста в .NET? - PullRequest
9 голосов
/ 28 августа 2009

У меня есть веб-страница asp.net с окном TinyMCE. Пользователи могут форматировать текст и отправлять HTML для хранения в базе данных.

На сервере я бы хотел удалить из текста html, чтобы в нем можно было хранить только текст в индексированном полнотекстовом столбце для поиска.

Легко убрать HTML-код на клиенте с помощью функции text () jQuery, но я бы предпочел сделать это на сервере. Существуют ли какие-либо утилиты, которые я могу использовать для этого?

EDIT

Смотри мой ответ.

РЕДАКТИРОВАТЬ 2

альтернативный текст http://tinyurl.com/sillychimp

Ответы [ 9 ]

13 голосов
/ 29 августа 2009

Я скачал HtmlAgilityPack и создал эту функцию:

string StripHtml(string html)
{
    // create whitespace between html elements, so that words do not run together
    html = html.Replace(">","> ");

    // parse html
    var doc = new HtmlAgilityPack.HtmlDocument();   
    doc.LoadHtml(html);

    // strip html decoded text from html
    string text = HttpUtility.HtmlDecode(doc.DocumentNode.InnerText);   

    // replace all whitespace with a single space and remove leading and trailing whitespace
    return Regex.Replace(text, @"\s+", " ").Trim();
}
8 голосов
/ 28 августа 2009
2 голосов
/ 31 января 2012
TextReader tr = new StreamReader(@"Filepath");
string str = tr.ReadToEnd();     
str= Regex.Replace(str,"<(.|\n)*?>", string.Empty);

но вам нужно иметь ссылку на пространство имен, т.е. на

system.text.RegularExpressions

используйте эту логику только для своего сайта

2 голосов
/ 29 августа 2009

Вот код Джеффа Этвуда RefactorMe для его Обеззараживания HTML-метода

0 голосов
/ 10 мая 2010

Вы можете использовать HTQL COM и запросить источник с помощью запроса: & tx;

0 голосов
/ 29 августа 2009

Так как вы, возможно, неправильно сформировали HTML в системе: BeautifulSoup или аналогичный.

Написано на Python; Я не уверен, как это может быть связано - используя язык .NET IronPython?

0 голосов
/ 29 августа 2009

Вы могли бы:

  • Используйте обычный старый TEXTAREA (стиль для height / width / font / etc.) Вместо TinyMCE.
  • Используйте встроенные параметры конфигурации TinyMCE для удаления нежелательного HTML.
  • Использование HtmlDecode (RegEx.Replace (mystring, "<[^>] +>", "")) на сервере.
0 голосов
/ 29 августа 2009

Если вы просто храните текст для индексации, вам, вероятно, нужно сделать немного больше, чем просто удалить HTML, например игнорировать стоп-слова и удалять слова короче (скажем) 3 символа. Тем не менее, простой тег и стриптизер, который я однажды написал, выглядит примерно так:

    public static string StripTags(string value)
    {
        if (value == null)
            return string.Empty;

        string pattern = @"&.{1,8};";
        value = Regex.Replace(value, pattern, " ");
        pattern = @"<(.|\n)*?>";
        return Regex.Replace(value, pattern, string.Empty);
    }

Он старый, и я уверен, что его можно оптимизировать (возможно, используя скомпилированный reg-ex?). Но это работает и может помочь ...

0 голосов
/ 29 августа 2009

Вы можете использовать что-то вроде этого

string strwithouthtmltag;    
strwithouthtmltag = Regex.Replace(strWithHTMLTags, "<[^>]*>", string.Empty)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...