防止某些HTML标签用Python呈现



假设我有一个字符串:

string = '<img src="image.png"><input type=text>'

我有一个函数,它将字符串转换为HTML标记,并删除所有标记,但<img>标记如下:

VALID_TAGS = ['img']
def sanitizeHTML(value):
    soup = BeautifulSoup(value)
    for tag in soup.findAll(True):
        if tag.name not in VALID_TAGS:
            tag.hidden = True
    return Markup(soup.renderContents())

如果我通过函数传递字符串,它将返回<img src="image.png">,因为这是唯一有效的HTML标记。

可以看到,<input>标签甚至没有出现在字符串中。我如何保持'<input type=text>'在字符串中,但不渲染它,所以它会显示为文本,而不是HTML。

我该怎么做呢?谢谢。

为此,我将使用bleach模块-这里的文档

Bleach负责对HTML标签进行消毒,并对"不安全"标签进行HTML转义。

下面是一个示例程序,说明如何使用漂白剂:

#!/usr/bin/env python
from bs4 import BeautifulSoup
import bleach
def sanitizeHTML(value):
    soup = BeautifulSoup(bleach.clean(value,tags=VALID_TAGS,attributes=VALID_ATTRIBUTES),"html5lib")
    return soup.renderContents()
VALID_TAGS = ['img']
VALID_ATTRIBUTES = ['src']
string = '<img src="image.png"><input type=text>'
result = sanitizeHTML(string)
print result

最新更新