繁体   English   中英

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

[英]How Can I strip HTML from Text in .NET?

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

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

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

编辑

看我的回答。

编辑2

替代文字http://tinyurl.com/sillychimp

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

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

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

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

system.text.RegularExpressions

只为你的网站采取这种逻辑

你可以使用这样的东西

string strwithouthtmltag;    
strwithouthtmltag = 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);
    }

它已经过时了,我确信它可以进行优化(可能使用已编译的reg-ex?)。 但它确实有效并可能有所帮助......

你可以:

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

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

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

您可以使用HTQL COM,并使用查询查询源:<body>&tx;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM