如何将一个HTML片段转换为另一个HTML片段?

3
我有一个浏览器编辑器,类型为contentEditable,用户可以复制/粘贴或选择HTML片段放入其中。
这些片段可以是任何类型的HTML,因此我们必须对内容进行清理,以便它不包含某些安全问题标签(如<script>等)。
我知道一些允许某些白名单策略的清理库(如JVM上的JSoup),但这些规则通常非常简单,例如说哪些标记/属性是白名单,而没有其他规定。
我们想要更高级的规则,例如:
  • 定义要保留或不保留的内联样式,
  • 将相对链接转换为绝对链接
  • 根据其className列出黑名单或白名单中的某些标记
  • 根据URI模式允许某些URI属性(如仅允许到特定域的链接)。
  • 在某些情况下,我们希望禁止的DOM节点被其子节点“替换”(以删除格式和HTML布局元素,但不会丢失黑名单标记中的文本节点)
到目前为止,我们已经编写了一些代码来处理这个问题,但我认为这非常hacky。是否有已知的库、标准或算法来处理这些问题?我不是XML解析/转换专家,是否有任何我可以使用的东西,如XSLT、SAX或其他可以帮助我解决问题的工具。
我正在寻找浏览器(JS)和JVM(Java或Scala)上的解决方案。你有什么好的建议吗?

1
你尝试过OWASP Java HTML Sanitizer吗?我没有,但它似乎高度可配置并且是开源的。在“HTML消毒”条目中可以在wikipedia找到。希望这有所帮助。 - fonkap
是的@fonkap,但是ElementPolicy不允许处理我的大多数用例 :( https://code.google.com/p/owasp-java-html-sanitizer/ - Sebastien Lorber
1
哦,我明白了,“ElementPolicy.apply”只接受标签的名称和属性。这显然不足以编写复杂的情况...非常抱歉。 - fonkap
1个回答

0

看来我回答得有点太快了。Showdown.js 对你没有帮助。由于似乎没有一个好的已知库,更好的解决方案是使用 HTML5 表单,在那里你可以编写自己的验证? - Jan_dh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接