Отбеливатель питона: непоследовательное поведение очистки
Я хотел бы использовать отбеливатель для форматирования какого-то потенциально нечистого 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:
#'<p >This <a href="book"> book </a> will help you</p>'
Как видите, отбеливатель очень противоречив:
- <и> открытия и закрытия
p
теги экранированы в<
а также>
, Для тега ссылки этого не происходит - Пространства в
</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"])