Python html-sanitizer позволяет тег img - PullRequest
0 голосов
/ 21 марта 2019

Здравствуйте, ребята, я использую пакет python html-sanitizer, но я не могу включить теги img, так как он отключен по умолчанию

Я пытался отредактировать файл sanitizer.py (показанный ниже) в пакетах сайта, но все равно не повезло.

DEFAULT_SETTINGS = {
    "tags": {
        "a",
        "h1",
        "h2",
        "h3",
        "strong",
        "em",
        "p",
        "ul",
        "ol",
        "li",
        "br",
        "sub",
        "sup",
        "hr",
        "img"
    },
    "attributes": {"a": ("href", "name", "target", "title", "id", "rel"),"img": ("src")},
    "empty": {"hr", "a", "br"},
    "separate": {"a", "p", "li"},
    "whitespace": {"br"},
    "add_nofollow": False,
    "autolink": False,
    "sanitize_href": sanitize_href,
    "element_preprocessors": [
        # convert span elements into em/strong if a matching style rule
        # has been found. strong has precedence, strong & em at the same
        # time is not supported
        bold_span_to_strong,
        italic_span_to_em,
        tag_replacer("b", "strong"),
        tag_replacer("i", "em"),
        tag_replacer("form", "p"),
        target_blank_noopener,
    ],
    "element_postprocessors": [],
}

Может кто-нибудь мне помочь. я хочу тег img только с атрибутом src

1 Ответ

0 голосов
/ 21 марта 2019

sanitizer не будет использовать DEFAULT_SETTINGS, если через Sanitizer(settings={...}) предоставляются другие настройки.Это может происходить здесь, но я подозреваю, что это неправильный атрибут empty.

sanitizer будет также удалять пустые теги, например, <em></em> очищаетсядо ''.Это хорошо, но <img .../> также приводит к пустому тегу (то есть без дочерних элементов), поэтому sanitizer очищает его.

Вам нужно добавить img в набор settings['empty'] вместе сcurrent {"hr", "a", "br"}.

Пока вы в нем, не редактируйте DEFAULT, а вместо этого определяйте свой собственный (используя копию DEFAULT).Например:

# Make a copy
my_settings = dict(html_sanitizer.sanitizer.DEFAULT_SETTINGS)

# Add your changes
mysettings['tags'].add('img')
mysettings['empty'].add('img')
mysettings['attributes'].update({'img': ('src', )})

# Use it
s = html_sanitizer.Sanitizer(settings=mysettings)
s.sanitize('<em><img src="/index.html"/></em>')
...