2012-01-27 3 views
2

Я хочу удалить все теги html из строки, кроме некоторых, которые я указываю. Если я называю конструктор со значениями по умолчанию все работает отлично:Strip html tags - lxml.html.clean.clean_html не работает должным образом

>>> cleaner = lxml.html.clean.Cleaner() 
>>> cleaner.clean_html('''<i>italic</i><script>alert('');</script>''') 
'<span><i>italic</i></span>' 

Но когда я пытаюсь указать несколько тегов, то больше не работает:

>>> allowed_tags = ['i','s'] 
>>> cleaner = lxml.html.clean.Cleaner(remove_unknown_tags=False,allow_tags=allowed_tags) 
>>> cleaner.clean_html('''<i>italic</i><s>strike</s>''') 
'<span></span>' 

Так что я делаю неправильно?

ответ

2

В качестве обходного пути вы можете добавить span и div теги на allowed_tags.

UPD

lxml.html.Cleanertries to convert строка HTML дерева с помощью вызова fromstring, который проверяет, если документ имеет некоторый корневой узел, и добавляет его в случае необходимости. Поэтому вам нужно разрешить span and div tags

1

Кажется, что ошибка. Я не вижу этого в версии lxml==2.3.3:

>>> from lxml.html import clean 
>>> clean.clean_html('''<i>italic</i><script>alert('');</script>''') 
'<span><i>italic</i></span>' 
>>> c = clean.Cleaner(allow_tags='is', remove_unknown_tags=False) 
>>> c.clean_html('''<i>italic</i><s>strike</s>''') 
'<div><i>italic</i><s>strike</s></div>' 
Смежные вопросы