Почему моя функция удаляет атрибут dir, несмотря на то, что он находится в моем списке разрешенных атрибутов?

#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'],
}