отбеливатель питона: непоследовательное поведение очистки - PullRequest
0 голосов
/ 24 января 2019

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

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

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

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