簡體   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