Python 的轻量级标记语言

4 投票
3 回答
1462 浏览
提问于 2025-04-15 13:21

我正在编写一个Python的网页应用程序,想要创建一个文本区域,让用户可以输入一种轻量级的标记语言。用户输入的文本会被导入到一个HTML模板中,然后在页面上显示。目前我使用这个命令来创建文本区域,允许用户输入任何(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轻松集成就行。

3 个回答

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:', '')
2

你可以使用restructured text。我不太确定它是否有清理选项,但它在Python中支持得很好,而且可以生成各种格式的文件。

8

使用Python的markdown实现

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

这个工具非常灵活,你可以使用各种扩展功能,甚至可以自己创建扩展。

撰写回答