【问题标题】:How can I strip html tags in C# [duplicate]如何在 C# 中去除 html 标签 [重复]
【发布时间】:2011-01-21 01:11:51
【问题描述】:

可能重复:
How to clean HTML tags using C#

在 C# 中去除 HTML 标记的最佳方法是什么?

【问题讨论】:

标签: c# .net html


【解决方案1】:

为保证没有 HTML 标记通过,请使用:HttpServerUtility.HtmlEncode(string);

如果你想让一些通过,你可以使用这个"Whitelist" approach

更新:在该代码中发现了一些漏洞;作为Developer from Fog Creek tells us

(第二个链接包括代码)。

【讨论】:

  • HTMLEncode("图片标签:")) %> 输出:图片标签:<img&gt 和 Strip it 不一样。
  • 这一切都取决于他想要的结果。如果他想确保没有任何 HTML 标记被执行(从而使自己对 XSS 开放),那么第一种方法是“最好的”方法。如果他只想让明文通过,第二种方式的变体是“最好的”。
  • 他可能想删除标签以在 rss-feed 或其他内容中将其显示为明文。在 PHP 中,您有一个名为 php.net/strip_tags 的内置函数,它的哪个声音是他想要的。但是白名单解决了这个问题,你也可以使用那个 HTML Pack 或者它被称为的任何东西..
  • 实际上,这种方法比上面建议的正则表达式更安全。这种方法的唯一缺点是用户可能不想看到编码的 HTML。
  • 答案中的链接是个坏主意,因为它们有时会中断!
【解决方案2】:
  public static string StripHTML(string htmlString)
  {

     string pattern = @"<(.|\n)*?>";

     return Regex.Replace(htmlString, pattern, string.Empty);
  }

【讨论】:

  • 很高兴为您效劳,妈妈
  • Ick,这个问题在 SO 中重复了很多次,同样的错误答案也重复了很多次。正如我在另一篇相同的帖子中已经说过的:“你不应该使用正则表达式来解析像 HTML 这样的上下文无关语法。如果 HTML 是由某个外部实体提供的,那么它可以很容易地被操纵以逃避你的正则表达式。”
  • 我们现在正在使用 htmlagilitypack
  • 这取决于您想要实现的目标。当不需要质量时,HAP 可能会非常缓慢地有效剥离几百万个短字符串。
  • 通过 css 类名字符串删除标签 cssClassName = "myCSSClass";字符串模式 = String.Format("
    ]+class=([""'])[^>]*{0}[^>]*\1[^>]*>(.|\n )*?
    ", cssClassName); Regex.Replace(htmlString, pattern, string.Empty);
【解决方案3】:

获取您的 HTML 字符串或文档并使用 HTML Agility Pack 对其进行解析。这将为您提供一个与 XmlDocument 非常相似的 HTMLDocument 对象。

然后您可以使用它的方法,例如SelectNodes 来访问您感兴趣的文档部分。

如果您选择使用其他方法,请注意使用正则表达式解析 HTML(一种非正则语言)被广泛认为是 a bad idea

无论采用哪种方法,如果您要保留一些标记,请使用白名单方法。这意味着删除所有没有明确需要的内容。

【讨论】:

  • HTML 敏捷包救了我一天。 +1
  • 如果它根本不是一个格式良好的文档怎么办?例如,只有一堆带有一个标签的文本,Agility Pack 会为您解析吗?
  • @EgorPavlikhin 是的,它将修复无效标记并制作有效的 html 文档。
  • +1 表示您不应该使用正则表达式解析 CFG。如果可以的话,我会为你 +100。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2010-12-14
  • 1970-01-01
  • 2017-12-07
  • 2011-07-20
  • 2012-08-14
  • 2012-10-19
相关资源
最近更新 更多