4

编写 Python Web 应用程序时,我想创建一个文本区域,用户可以在其中输入轻量级标记语言的文本。文本将被导入到 html 模板并在页面上查看。今天我使用这个命令来创建 textarea,它允许用户输入任何(html)文本:

my_text = cgidata.getvalue('my_text', 'default_text')
ftable.AddRow([Label(_('Enter your text')),
               TextArea('my_text', my_text, rows=8, cols=60).Format()])

我怎样才能改变它,以便只允许一些(安全的,最终轻量级的)标记?欢迎所有建议,包括消毒剂,只要它易于与 Python 集成。

4

3 回答 3

8

使用 python markdown实现

import markdown
mode = "remove" # or "replace" or "escape"
md = markdown.Markdown(safe_mode=mode)
html = md.convert(text)

它非常灵活,您可以使用各种扩展,创建自己的等。

于 2009-08-03T18:49:43.840 回答
2

您可以使用重组后的文本。我不确定它是否有清理选项,但 Python 很好地支持它,它会生成各种格式。

于 2009-08-03T18:08:18.493 回答
1

这个简单的清理功能使用白名单,与python-html-sanitizer-scrubber-filter的解决方案大致相同,但也允许限制属性的使用(因为您可能不希望有人使用,等等,style属性):

from BeautifulSoup import BeautifulSoup

def sanitize_html(value):
    valid_tags = 'p i b strong a pre br'.split()
    valid_attrs = 'href src'.split()
    soup = BeautifulSoup(value)
    for tag in soup.findAll(True):
        if tag.name not in valid_tags:
            tag.hidden = True
        tag.attrs = [(attr, val) for attr, val in tag.attrs if attr in valid_attrs]
    return soup.renderContents().decode('utf8').replace('javascript:', '')
于 2009-08-03T20:42:23.770 回答