我想删除除以下内容之外的所有html / javascript:
<b></b>
<ul></ul>
<li></li>
<a></a>
感谢。
答案 0 :(得分:4)
你想要一种快速或正确的方式吗?基于正则表达式的方法不太可能是正确的,可能会导致XSS次攻击。
您应该使用HTML解析器,例如Beautiful Soup甚至htmllib
。
此外,<a>
可以包含javascript:
href
个,还有各种on
*属性,这些属性都是javascript。你可能想剥掉所有这些。通常,白名单方法最好:只保留您知道的属性(和属性值)是安全的。
答案 1 :(得分:1)
虽然我同意劳伦斯的观点,但有时会采用快速而肮脏的99%方法完成工作而不会产生其他问题。
这是一个演示基于正则表达式的方法的示例 -
import re
CLEANBODY_RE = re.compile(r'<(/?)(.+?)>', re.M)
def _repl(match):
tag = match.group(2).split(' ')[0]
if tag == 'p':
return '<%sp>' % match.group(1)
elif tag in ('a', 'br', 'ul', 'li', 'b', 'strong', 'em', 'i'):
return match.group(0)
return u''
def cleanbody(html):
return CLEANBODY_RE.sub(_repl, html)
答案 2 :(得分:0)
将要保留的元素替换为占位符值,然后将剩余的&lt;。*&gt; regex输出,最后用相应的html元素替换占位符。