我正在使用 Stack Overflow 上使用的 Markdown 编辑器的 Pagedown 实现,而我的项目正在使用 Django。我遇到的问题是,像<
Markdown 代码部分中的特殊字符被 Django 转义,但随后被 Pagedown 视为代码并显示为<
.
当我键入如下代码片段时:
for(var i = 0; i < 10; i++)
我在下面得到了正确的预览。<
也正确保存在数据库中,而不是 HTML 实体中<
。
但是,当我在新页面上输出这条评论时,Django 会自动转义这些特殊字符。
for(var i = 0; i < 10; i++)
我试过关闭自动转义,但这似乎是正确的行为,因为如果用户写
<script>alert('hi');</script>
作为代码注释,Django 并没有对此进行转义,它会执行这段 JavaScript 代码。但是,当 Pagedown 将其转换为代码标记时,它会<pre>
在此部分周围添加标记,以便代码显示为
for(var i = 0; i < 10; i++)
我怎样才能让代码部分显示正确的未转义字符,但还要安全地编写它,这样它就不会执行任意 JavaScript 代码?似乎我可以让 Django 输出保存的注释(转义),然后转义所有内容,然后重新转义所有非代码部分。
有没有更好的方法来做到这一点?