繁体   English   中英

在Python字符串中剥离某些html标签的最快方法是什么?

[英]What's the fastest way to strip certain html tags in a Python string?

除了以下内容,我想剥离所有html / javascript:

<b></b>
<ul></ul>
<li></li>
<a></a>

谢谢。

您想要快速还是正确的方法? 基于正则表达式的方法不太可能正确,并且可能使您容易受到XSS攻击。

您应该使用HTML解析器,例如Beautiful Soup甚至htmllib

另外, <a>可以包含javascript: href并且还有各种on *属性,它们是javascript。 您可能希望将所有这些剥离。 通常,白名单方法是最好的:仅保留您知道的安全属性(和属性值)。

虽然我同意劳伦斯(Laurence)的观点,但有时候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)

将您要保留的元素替换为占位符值,然后对所有剩余的<。*>进行正则表达式,最后将占位符替换为相应的html元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM