【问题标题】:How Can I strip HTML from Text in .NET?如何在 .NET 中从文本中去除 HTML?
【发布时间】:2010-11-23 20:33:45
【问题描述】:

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

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

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

编辑

看我的回答。

编辑 2

alt text http://tinyurl.com/sillychimp

【问题讨论】:

  • 如果您只是要去除所有格式,为什么还要使用 TinyMCE?!
  • 我正在存储 TinyMCE 生成的 html,以便将格式化的文本呈现给用户。我将把 html 剥离的文本存储在不同的列中以进行全文搜索。我认为全文索引/搜索包含大量 HTML 的列不是一个好主意。我没有在原始问题中包含这些细节,因为它与我的问题无关。
  • +1 因为这只猴子让我笑了

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


【解决方案1】:

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

【讨论】:

  • 看看richardtallent对你的回答的评论。
  • 我看到了。我想我会坚持我写的 5 行代码。
【解决方案2】:

【讨论】:

  • 一个更好的主意是使用 html 解析器。
  • 为什么用一个简单的正则表达式来完成这项工作?
  • @mkoryak:你能解释一下为什么会更好吗?
  • 这会去除标签,但会留下 HTML 编码的实体,所以这并不是一个完整的答案。
  • 补充一下richardtallent所说的:格式错误的HTML可以破坏正则表达式并导致它剥离不应该的东西。完整的 HTML 解析器旨在适应格式错误的 HTML,因此您不会丢失数据或获得“额外”数据。
【解决方案3】:

这是 Jeff Atwood 的 Sanitize HTML method 的 RefactorMe 代码链接

【讨论】:

【解决方案4】:
TextReader tr = new StreamReader(@"Filepath");
string str = tr.ReadToEnd();     
str= Regex.Replace(str,"<(.|\n)*?>", string.Empty);

但您需要引用一个命名空间,即:

system.text.RegularExpressions

仅为您的网站采用此逻辑

【讨论】:

  • RegEX 不是解析 RegEx 的理想选择。请参阅 RioTera 答案的 cmets,但如果您的 HTML 格式不正确,RegEx 将删除错误的数据。
  • @psubsee2003 riotera 只是链接到一个推荐完全相同的正则表达式的答案;有一天这个链接会死掉,我们会很幸运这个答案中有正则表达式。这是更好的答案。
  • @ChrisMoschini 我从来没有说过答案更好。我说看那个答案下的cmets。
【解决方案5】:

如果您只是存储用于索引的文本,那么您可能想要做的不仅仅是删除 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】:

    你可以:

    • 使用普通的旧 TEXTAREA(样式为高度/宽度/字体/等)而不是 TinyMCE。
    • 使用 TinyMCE 的内置配置选项去除不需要的 HTML。
    • 在服务器上使用 HtmlDecode(RegEx.Replace(mystring, "]+>", ""))。

    【讨论】:

      【解决方案7】:

      您可能在系统中使用了格式错误的 HTML:BeautifulSoup 或类似的可以使用。

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

          你可以使用这样的东西

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-27
            • 1970-01-01
            • 1970-01-01
            • 2010-12-02
            • 1970-01-01
            • 2011-03-29
            • 2017-12-06
            • 1970-01-01
            相关资源
            最近更新 更多