#python #html
Вопрос:
Я использую пакет отбеливателя, чтобы удалить недопустимый html. Я озадачен, почему dir
атрибут удаляется из моей строки. Это dir
не атрибут, или это может быть просто то, что пакет не поддерживает dir
?
Я включил весь сценарий, так что вы можете запустить его для вашего удобства.
import bleach
string = """<p dir="rtl">asdasdasd <span>asdasdasd</span> asdsadasdsad .<br data-mce-bogus="1"></p>"""
def strip_invalid_html(html):
""" strips invalid tags/attributes """
allowed_tags = [
'p', 'a', 'blockquote',
'h1', 'h2', 'h3', 'h4', 'h5',
'strong', 'em',
'br',
'span',
]
allowed_attributes = {
'a': ['href', 'title'],
'dir': ['rtl', 'ltr']
}
cleaned_html = bleach.clean(
html,
attributes=allowed_attributes,
strip=True,
tags=allowed_tags
)
print(cleaned_html)
strip_invalid_html(string)
Ответ №1:
Если вы передаете диктант для attributes
, дикт должен сопоставлять имена тегов с разрешенными именами атрибутов, а не сопоставлять имена атрибутов с разрешенными значениями атрибутов.
Если вы хотите 'dir'
быть разрешенным атрибутом для p
тегов, вам нужна 'p': ['dir']
запись, а не 'dir': ['rtl', 'ltr']
запись:
allowed_attributes = {
'a': ['href', 'title'],
'p': ['dir'],
}