此:
<embed type="text/html" src="https://example.com/" width="100%" height="100%">
转换为此(在页面上呈现时):
<p> <embed type="text/html" src="https://example.com/" width="100%" height="100%"> </p>
使embed标签不可用。有什么办法可以阻止这种情况的发生? 使用iframe广告代码时也会发生同样的情况。我希望页面“ example.com”能够呈现。
我将Django用于该项目,并显示以下内容:
{{ page.text | escape | markdown | safe }}
page.text
是保存文本的变量。
我使用的Markdown的版本是3.2。
答案 0 :(得分:0)
我将Django用于该项目,并显示以下内容:
{{ page.text | escape | markdown | safe }}
假设page.text
包含您在问题中显示的<embed>
,那么您的问题是您使用the escape
filter。
它的工作是转义HTML代码,其中包括将<
转换为<
,并将>
转换为>
。完成转换后,markdown
和safe
过滤器都不会将其改回。
先使用escape
然后再使用safe
并没有多大意义,因为safe
只是防止自动转义。
正确的解决方案取决于page.text
的来源。如果您信任该来源,则可以从模板中删除escape
。 请注意,这确实为恶意用户或意外滥用(例如,由cross-site scripting。
如果您不信任来源,则有两个主要选择:
escape
并接受page.text
中包含的所有HTML内容均不起作用。escape
,但在Markdown步骤之后通过更精细的清理程序运行HTML,类似于what GitHub does。另请参见Best practice for allowing Markdown in Python, while preventing XSS attacks?