【问题标题】:Html white list in c#c#中的html白名单
【发布时间】:2011-09-20 04:40:48
【问题描述】:

花了大约 30 分钟左右的时间寻找这个问题的最终解决方案。

这个问题似乎被问过很多次了,但是......

  • 大多数解决方案都使用正则表达式。
  • 有很多帖子说不应该使用正则表达式来处理html。
  • 有很多答案只是提供了 HTMLAgilityPack(在 Codeplex 上)的链接,但没有关于如何使用此包来满足所述要求的真实示例。

所以我正在寻找满足以下要求的最佳解决方案。

  • 我想提供一个允许的 HTML 标记列表。
  • 所有不在允许列表中的标签都应该连同它们的属性和内容一起被删除。
  • 允许列表中的任何标签都应与属性和内容一起保留。
  • 该解决方案应处理不同的本地化 - 可能会使用使用英语以外的语言和字符集的用户。
  • [已添加] 该解决方案应处理诸如论坛帖子之类的文本,而不是完整的 html 页面 - 因此允许使用诸如 b u i 等标签,但不允许使用脚本 div 等,应将其删除。

我正在寻找 C# 解决方案,如果最好使用 RegEx,那么我很乐意这样做。如果有一个现有的库可以做到这一点,我也很乐意使用它们。如果可能的话,我会很感激一些示例代码。

我正在寻找一种确定的、久经考验的方法来解决这个问题,而不是广泛的辩论+封闭的帖子等:) :)

提前致谢。

【问题讨论】:

  • 我们是在谈论一个有效的 HTML 文档还是在谈论一段包含一些 HTML 标签的文本,例如论坛帖子?
  • @DanielHilgarth - 好点我会更新问题。
  • 对于一个论坛,您可能想使用 BBCode 并使用转换器到 HTML。然后,您可以简单地替换所有 s,并且您没有忘记阻止一些不常见标签的风险。
  • 对于这个项目,它更像是一个博客 - 我希望用户能够使用定义的标签,其中包括 div 以及预选的类名列表。

标签: c# html regex whitelist blacklist


【解决方案1】:

您可以使用Html Agility Pack 来解析HTML。然后,您可以按照自己喜欢的方式处理元素并将其再次写回 HTML。

【讨论】:

  • 请举例说明这如何满足我的要求。 HTML Agility Pack 的 CodePlex 示例很少。
  • 嗯 - 每个应用程序都是独一无二的。因此,HTML Agility Pack 上的文档不会包含如何准确解决 your 问题的示例。但是,您可以使用 HTML Agility Pack 以递归方式遍历 HTML 文档中的所有节点(“标签”)并删除您不想拥有的节点。
  • 听起来很有趣 - 我会对其进行测试并报告。你有如何获取所有标签的sn-p吗?
  • 尝试 'doc.DocumentElement.SelectNodes("//*")' 选择 HtmlDocument 中的所有节点(使用 XPath:w3schools.com/XPath/xpath_syntax.asp);另见:htmlagilitypack.codeplex.com/wikipage?title=Examples
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2021-10-30
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2010-11-18
相关资源
最近更新 更多