2

我想使用漂白剂来格式化一些可能不干净的 HTML。在以下示例中,理想情况下漂白剂应去除:

  • 第一个开口中的额外空间<p >
  • 结束链接标签中的属性</a attr="test">
  • 最后关闭的多余空格</p >

我的代码如下所示:

import bleach
html = """<p   >This <a href="book"> book </a attr="test"> will help you</p  >"""
html_cleaned = bleach.clean(html)

# html_cleaned is:
#'&lt;p  &gt;This <a href="book"> book </a> will help you&lt;/p&gt;'

如您所见,漂白剂非常不一致:

  • 开始和结束p标记的 < 和 > 转义为&lt;and &gt;。对于链接标签,这不会发生
  • 中的空格</p >被删除,在开口中<p >它们不是
  • 另外,如果我在结束p标记中添加一个属性</p attr="test">,它不会被删除,而关闭</a attr="test">非法属性会被删除。

这里发生了什么?

4

1 回答 1

2

bleach.cleantags需要一个指定允许标签的可选参数。默认情况下不允许使用该p标签,因此不会进行消毒处理。

我的问题可以通过以下方式解决:

cleaned_doc = bleach.clean(input_doc, tags = bleach.sanitizer.ALLOWED_TAGS+["p"])
于 2019-01-24T20:32:14.080 回答