我想使用漂白剂来格式化一些可能不干净的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">,则将删除非法属性。


这是怎么回事?

最佳答案

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

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

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

关于python - python bleach:不一致的清洁行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54354764/

10-14 13:14