Python 的轻量级标记语言
我正在编写一个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)
这个工具非常灵活,你可以使用各种扩展功能,甚至可以自己创建扩展。