使用 Python 阻止某些 HTML 标签呈现
Prevent certain HTML tags from rendering with 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())
如果我通过函数传递字符串,它将 return <img src="image.png">
因为这是唯一有效的 HTML 标签。
如您所见,<input>
标记甚至没有出现在字符串中。我如何将 '<input type=text>'
保留在字符串中但不呈现它以便它显示为文本而不是 HTML.
我该怎么做?谢谢。
为此,我将使用 bleach
模块 - documentation here
Bleach 会清理您的 HTML 标签并 HTML-转义 "unsafe" 标签。
这是一个示例程序,说明了如何使用漂白剂:
#!/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
假设我有一个字符串:
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())
如果我通过函数传递字符串,它将 return <img src="image.png">
因为这是唯一有效的 HTML 标签。
如您所见,<input>
标记甚至没有出现在字符串中。我如何将 '<input type=text>'
保留在字符串中但不呈现它以便它显示为文本而不是 HTML.
我该怎么做?谢谢。
为此,我将使用 bleach
模块 - documentation here
Bleach 会清理您的 HTML 标签并 HTML-转义 "unsafe" 标签。
这是一个示例程序,说明了如何使用漂白剂:
#!/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