【发布时间】:2012-02-10 04:51:04
【问题描述】:
我正在使用 BeautifulSoup 从任意文本集中转义所有 HTML 标记(一组预先批准的标记除外,例如 a)。但是,如果它们是实际有效的 HTML 标签,我只希望它转义标签。如果某些东西看起来像一个标签,但不是,它最终会添加一些 HTML 来关闭它,这是我不想要的。
示例:如果有人输入文本<integer>,我的代码最终会输出<integer></integer> 而不仅仅是<integer>
这是代码(value 是 HTML 字符串,VALID_TAGS 只是可接受的标签名称列表)。
soup = BeautifulSoup.BeautifulSoup(
value, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
# Loop through all the tags. If it is invalid, escape the characters.
for tag in soup.findAll():
if tag.name not in VALID_TAGS:
tag.replaceWith(cgi.escape(str(tag)))
return soup.renderContents()
提前致谢。
【问题讨论】:
-
我的看法是你使用了错误的工具来完成这项工作。
-
至少你还应该过滤属性;
<a onmouseover="alert('Oh dear')">Look at this!</a>看看html5sec.org。 -
我也在过滤掉属性(同样,白名单除外)。为了清楚起见,我从示例代码和问题中删除了它。
标签: python html-parsing beautifulsoup