如何从.NET中的文本中删除HTML?

时间:2009-08-28 19:56:04

标签: c# .net asp.net jquery html

我有一个带有TinyMCE框的asp.net网页。用户可以格式化文本并发送HTML以存储在数据库中。

在服务器上,我想从文本中删除html,这样我就只能将文本存储在全文索引列中进行搜索。

使用jQuery的text()函数在客户端上删除html是一件轻而易举的事,但我宁愿在服务器上执行此操作。我可以使用任何现有的实用工具吗?

修改

请参阅我的回答。

编辑2

alt text http://tinyurl.com/sillychimp

9 个答案:

答案 0 :(得分:13)

我下载了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();
}

答案 1 :(得分:8)

答案 2 :(得分:2)

这是Jeff Atwood的Sanitize HTML method

的RefactorMe代码链接

答案 3 :(得分:2)

TextReader tr = new StreamReader(@"Filepath");
string str = tr.ReadToEnd();     
str= Regex.Replace(str,"<(.|\n)*?>", string.Empty);

但你需要引用一个名称空间,即:

system.text.RegularExpressions

只为您的网站采用此逻辑

答案 4 :(得分:0)

你可以使用这样的东西

string strwithouthtmltag;    
strwithouthtmltag = Regex.Replace(strWithHTMLTags, "<[^>]*>", string.Empty)

答案 5 :(得分:0)

如果您只是存储索引文本,那么您可能想要做的不仅仅是删除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?)。但它确实有效并可能有所帮助...

答案 6 :(得分:0)

你可以:

  • 使用普通的旧TEXTAREA(高度/宽度/字体/等),而不是TinyMCE。
  • 使用TinyMCE的内置配置选项来删除不需要的HTML。
  • 在服务器上使用HtmlDecode(RegEx.Replace(mystring,“&lt; [^&gt;] +&gt;”,“”))。

答案 7 :(得分:0)

由于系统中可能存在格式错误的HTML:可能会使用BeautifulSoup或类似内容。

它是用Python编写的;我不确定它是如何接口的 - 使用.NET语言IronPython?

答案 8 :(得分:0)

您可以使用HTQL COM,并使用查询查询源: &LT;身体GT; &安培; TX;