C# 如何从.NET中的文本中剥离HTML?

C# 如何从.NET中的文本中剥离HTML?,c#,.net,asp.net,jquery,html,C#,.net,Asp.net,Jquery,Html,我有一个asp.net网页,它有一个TinyMCE框。用户可以格式化文本并发送HTML以存储在数据库中 在服务器上,我想从文本中提取html,这样我就可以只将文本存储在全文索引列中进行搜索 使用jQuery的text()函数在客户端剥离html很容易,但我更愿意在服务器上这样做。是否有任何现有的实用程序可供我使用 编辑 看看我的答案 编辑2 看看这个你可以用这样的东西 string strwithouthtmltag; strwithouthtmltag = Regex.Replace(

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

在服务器上,我想从文本中提取html,这样我就可以只将文本存储在全文索引列中进行搜索

使用jQuery的text()函数在客户端剥离html很容易,但我更愿意在服务器上这样做。是否有任何现有的实用程序可供我使用

编辑 看看我的答案

编辑2
看看这个

你可以用这样的东西

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

如果您只是存储用于索引的文本,那么您可能需要做的不仅仅是删除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);
    }
公共静态字符串StripTags(字符串值)
{
如果(值==null)
返回字符串。空;
字符串模式=@“&.{1,8};”;
value=Regex.Replace(值,模式,“”);
模式=@“;
返回Regex.Replace(值、模式、字符串.Empty);
}
它很旧,我相信它可以被优化(也许使用编译过的reg-ex?)。但它确实有效,并且可能有帮助……

您可以:

  • 使用普通的旧文本区域(根据高度/宽度/字体等设置样式)而不是TinyMCE
  • 使用TinyMCE的内置配置选项剥离不需要的HTML
  • 在服务器上使用HtmlDecode(RegEx.Replace(mystring,]+>,“”)

这是Jeff Atwood的重构代码链接,用于他的

我下载并创建了此函数:

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();
}

因为系统中可能存在格式不正确的HTML:或者可以使用类似的格式


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

您可以使用HTQL COM,并通过查询查询源代码: &tx


对于您的网站,只采用这种逻辑

更好的方法是使用html解析器。为什么使用简单的正则表达式来完成这项工作?@mkoryak:请您解释一下为什么它会更好?这将剥离标记,但保留html编码的实体,因此,这并不是一个完整的答案。再加上richardtallent所说的:格式错误的HTML会破坏正则表达式,导致它删除不应该删除的内容。一个完整的HTML解析器是为了适应格式错误的HTML而设计的,这样你就不会丢失数据或获得“额外”数据。如果你只是想去掉所有格式,为什么要使用TinyMCE?!我正在存储TinyMCE生成的html,这样我就可以将格式化文本呈现给用户。我将把html剥离文本存储在不同的列中,用于全文搜索。我认为对包含大量HTML的列进行全文索引/搜索不是一个好主意。我没有在原来的问题中包括这些细节,因为这与我的问题无关。+1为了让我用这个猴子说话,请看richardtallent对你答案的评论。我看到了。我想我会坚持我写的5行代码。下面是他如何平衡标签,这样你就不会在你的页面上关闭一个未打开的div:RegEX不是解析RegEX的理想选择。请参阅RioTera答案的注释,但简而言之,如果您的HTML格式不正确,正则表达式将删除错误的数据。@psubsee2003 RioTera只是链接到一个建议使用完全相同正则表达式的答案;总有一天这个链接会消失,幸运的是这个答案中有正则表达式。这是更好的答案。@ChrisMoschini我从来没有说过这个答案更好。我说,请看该答案下的评论。
TextReader tr = new StreamReader(@"Filepath");
string str = tr.ReadToEnd();     
str= Regex.Replace(str,"<(.|\n)*?>", string.Empty);
system.text.RegularExpressions