2012-03-13 41 views
2

我想打印出用户提交markdown生成的HTML,由如何防止web2py自动编码html实体?

{{=markdown(post.message)}} 

其中降价功能是通过

进口
from gluon.contrib.markdown.markdown2 import markdown 

We2Py似乎自动编码HTML实体,所以每<被转换成&lt;并且每个>被转换成&gt;。我如何防止这种情况发生?

在这样做的时候,我需要记住哪些安全隐患?另外,任何人都可以告诉我,如何将HTML存储在数据库中的同时保留markdown

回答

9

你必须这样做:

{{=XML(markdown(post.message))}} 

每串是由模板消毒渲染,如果你通过"<div>"将呈现为"&lt;div&gt;"这是为了防止恶意代码。

当你传递一个字符串XML帮手XML("<div>")它使用XML解析器呈现字符串中的XML树结构,XML有一个方法.xml()返回转义的字符串到response.body使用户的浏览器有正确的HTML 。

你可以控制一些参数XML的渲染。

:param text: the XML text 
:param sanitize: sanitize text using the permitted tags and allowed attributes (default False) 
:param permitted_tags: list of permitted tags (default: simple list of tags) 
:param allowed_attributes: dictionary of allowed attributed 
+0

它的工作!但是如何? – Sathvik 2012-03-13 07:14:52

+1

已被加入到回答 – 2012-03-13 07:44:52

+0

如果用户用脚本提交一个类似的XML树结构会怎么样?我的意思是web2py如何区分'XML'输出和用户提交的输出? – Sathvik 2012-03-13 08:05:16