我有一个带有TinyMCE框的asp.net网页。用户可以格式化文本并发送HTML以存储在数据库中。
在服务器上,我想从文本中删除html,这样我就只能将文本存储在全文索引列中进行搜索。
使用jQuery的text()函数在客户端上删除html是一件轻而易举的事,但我宁愿在服务器上执行此操作。我可以使用任何现有的实用工具吗?
请参阅我的回答。
答案 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)
你可以:
答案 7 :(得分:0)
由于系统中可能存在格式错误的HTML:可能会使用BeautifulSoup或类似内容。
它是用Python编写的;我不确定它是如何接口的 - 使用.NET语言IronPython?
答案 8 :(得分:0)
您可以使用HTQL COM,并使用查询查询源: &LT;身体GT; &安培; TX;