C# 从字符串中删除脚本和链接标记

C# 从字符串中删除脚本和链接标记,c#,html,string,C#,Html,String,我正在尝试从字符串中删除script和link标记。下面是我到现在为止得到的 代码 rawHtml = rawHtml.Remove(rawHtml.IndexOf("<script"), (rawHtml.LastIndexOf("</script>") - rawHtml.IndexOf("<script")) + 5); rawHtml = rawHtml.Remove(rawHtml.IndexOf("<link"), (rawHtm

我正在尝试从字符串中删除
script
link
标记。下面是我到现在为止得到的

代码

rawHtml = rawHtml.Remove(rawHtml.IndexOf("<script"), (rawHtml.LastIndexOf("</script>") - 
          rawHtml.IndexOf("<script")) + 5);

rawHtml = rawHtml.Remove(rawHtml.IndexOf("<link"), (rawHtml.LastIndexOf("/>") - 
          rawHtml.IndexOf("<link")) + 3);

rawHtml=rawHtml.Remove(rawHtml.IndexOf(“这将删除脚本、链接和样式标记之间的所有内容,然后从其余标记中删除html标记(但保留内容)

注:在@yelliver对我之前的答案进行改进后,我将其纳入(已投票)并阐述了您关于链接的观点

/// <summary>
/// Helper method to strip html tags from html
/// </summary>
/// <param name="htmlText">raw html</param>
/// <returns>string without html tags</returns>
public string StripHTML(string hTMLText)
{
    // Remove script and style tags
    Regex rRemScript = new Regex(@"<(script|style)[^>]*>[\s\S]*?</\1>");
    hTMLText = rRemScript.Replace(hTMLText, "");

    // Remove link tags AND CONTENTS
    Regex rRemLink = new Regex(@"<link[\s\S]*?/>");
    hTMLText = rRemLink.Replace(hTMLText, "");

    // Strip other html tags (leaving contents)
    Regex reg = new Regex("<[^>]+>", RegexOptions.IgnoreCase);
    return reg.Replace(hTMLText, "");
}
//
///从html中剥离html标记的帮助器方法
/// 
///原始html
///不带html标记的字符串
公共字符串StripHTML(字符串hTMLText)
{
//删除脚本和样式标记
Regex-rRemScript=new Regex(@“]*>[\s\s]*?”;
hTMLText=rRemScript.Replace(hTMLText,“”);
//删除链接标签和内容
Regex-rRemLink=新的Regex(@“);
hTMLText=rRemLink.Replace(hTMLText,“”);
//去除其他html标记(保留内容)
Regex reg=new Regex(“]+>”,RegexOptions.IgnoreCase);
返回注册表替换(hTMLText,“”);
}

使用反向引用,我改进了@HockeyJ答案: 而不是:

Regex rRemScript = new Regex(@"<script[^>]*>[\s\S]*?</script>");
hTMLText = rRemScript.Replace(hTMLText, "");

// Remove link content
Regex rRemLink = new Regex(@"<link[^>]*>[\s\S]*?</link>");
hTMLText = rRemLink.Replace(hTMLText, "");

// Remove style content
Regex rRemStyle = new Regex(@"<style[^>]*>[\s\S]*?</style>");
hTMLText = rRemStyle.Replace(hTMLText, "");
Regex-rRemScript=new Regex(@“]*>[\s\s]*?”;
hTMLText=rRemScript.Replace(hTMLText,“”);
//删除链接内容
Regex-rRemLink=new Regex(@“]*>[\s\s]*?”;
hTMLText=rRemLink.Replace(hTMLText,“”);
//删除样式内容
正则表达式rRemStyle=新正则表达式(@“]*>[\s\s]*?”;
hTMLText=rRemStyle.Replace(hTMLText,“”);
只需使用:

Regex rRemScript = new Regex(@"<(script|link|style)[^>]*>[\s\S]*?</\1>");
hTMLText = rRemScript.Replace(hTMLText, "");
Regex-rRemScript=new Regex(@“]*>[\s\s]*?”;
hTMLText=rRemScript.Replace(hTMLText,“”);

如果您试图阻止xss攻击,请看以下内容:@Sycraw,不,我只想要不带
script
link
标记的html字符串,实际上我会将此html导出到excel。好的……现在我得到的唯一选择是(如果它是格式良好的html)要将其转换为xmldocument并使用xpath删除标记:不知道性能如何,但是如果rawhtml只是一个字符串,那么使用字符串就非常繁重,因为它们是值类型,也许这个解决方案可以提高性能,但这不会删除
链接
标记,链接标记从
@开始tom-doh!说得好。它必须保留内容。我在一个网站上试用过,它确实删除了链接标签。谢谢,但这并没有删除
链接
标签,链接标签以
开头