Отбеливатель питона: непоследовательное поведение очистки

Я хотел бы использовать отбеливатель для форматирования какого-то потенциально нечистого 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 ответ

Решение

bleach.clean ожидает необязательный tags параметр, который определяет разрешенные теги. p тег не разрешен по умолчанию и поэтому не получает санитарной обработки.

Моя проблема может быть исправлена ​​с помощью:

cleaned_doc = bleach.clean(input_doc, tags = bleach.sanitizer.ALLOWED_TAGS+["p"])
Другие вопросы по тегам