【问题标题】:Remove script and link tags from string从字符串中删除脚本和链接标签
【发布时间】:2019-10-25 17:15:42
【问题描述】:

我正在尝试从字符串中删除 scriptlink 标记。以下是我到现在得到的。

代码

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

有没有更好的方法不用手动写数字?

【问题讨论】:

  • 如果你想防止xss攻击,看看这个:stackoverflow.com/questions/31064159/…
  • @Sycraw ,不,我只想要没有scriptlink标签的html字符串,实际上我会将这个html导出到excel。
  • 好的...现在我得到的唯一选择是(如果它是格式良好的 HTML)将其转换为 xmldocument 并使用 xpath 删除标签:stackoverflow.com/questions/20611/… 不知道为了性能,但如果 rawhtml 只是一个字符串,那么使用字符串真的很重,因为它们是值类型,也许这个解决方案可以提高性能

标签: c# html string


【解决方案1】:

这将删除脚本、链接和样式标签之间的所有内容,然后从其余部分中删除 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, "");
}

【讨论】:

  • 谢谢,但这不会删除link 标签,链接标签以&lt;link 开头并以/&gt; 结尾
  • @stom - 哦!好点子。它必须保留内容。我在一个网站上试过,它确实去掉了链接标签。
【解决方案2】:

使用反向引用,我改进了@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(@"<(script|link|style)[^>]*>[\s\S]*?</\1>");
hTMLText = rRemScript.Replace(hTMLText, "");

【讨论】:

  • 谢谢,但这不会删除link 标签,链接标签以&lt;link 开头并以/&gt; 结尾
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2013-06-03
  • 1970-01-01
  • 2013-02-24
  • 2019-06-21
  • 2014-08-07
  • 2010-11-09
相关资源
最近更新 更多