编写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集成。
发布于 2009-08-03 18:49:44
使用python markdown实现
import markdown
mode = "remove" # or "replace" or "escape"
md = markdown.Markdown(safe_mode=mode)
html = md.convert(text)它非常灵活,你可以使用各种扩展,创建你自己的等。
发布于 2009-08-03 18:08:18
您可以使用restructured text。我不确定它是否有清理选项,但它得到了Python的很好支持,并且它可以生成各种格式。
发布于 2009-08-03 20:42:24
这个简单的清理函数使用白名单,与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:', '')https://stackoverflow.com/questions/1223741
复制相似问题