2012-01-27 5 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>' 
関連する問題