python bleach:不一致的清洁行为

时间:2019-01-24 20:23:48

标签: python python-3.x bleach

我想用漂白剂格式化一些可能不干净的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;&gt;。对于链接标记,这不会发生
  • </p >中的空格已删除,开头<p >中的空格未删除
  • 此外,如果我将属性添加到结束p标签</p attr="test">中,则不会删除该属性,而对于结束</a attr="test">,则删除了非法属性。

这是怎么回事?

1 个答案:

答案 0 :(得分:2)

bleach.clean需要一个可选的tags参数,该参数指定允许的标签。 默认情况下,p标签是不允许的,因此不会得到消毒处理。

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

cleaned_doc = bleach.clean(input_doc, tags = bleach.sanitizer.ALLOWED_TAGS+["p"])