2012-01-27 2 views
2

내가 지정한 일부 문자열을 제외한 모든 HTML 태그를 제거하고 싶습니다. 내가 전화를 기본값으로 모든 것을 가진 생성자가 잘 작동하는 경우 :스트립 HTML 태그 - 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

해결 방법으로 및 div 태그를 allowed_tags에 추가 할 수 있습니다.

UPD

lxml.html.Cleanertries to convert 문자열은 문서가 어떤 루트 노드가있는 경우 확인하고 필요한 경우 추가 fromstring를 호출하여 트리를 HTML로. 그래서 당신이 허용해야 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>' 
관련 문제