我正在使用Stack Overflow上使用的Markdown编辑器的Pagedown实现,我的项目正在使用Django。我遇到的问题是,Markdown代码部分中的<
等特殊字符被Django转义,但后来被Pagedown视为代码并显示为<
。
当我输入如下代码段时:
for(var i = 0; i < 10; i++)
我在下面得到了正确的预览。 <
也正确地保存在数据库中,而不是HTML实体<
中。
但是,当我在新页面上输出此注释时,Django会自动转义这些特殊字符。
for(var i = 0; i < 10; i++)
我已经尝试关闭autoescape,但这似乎是正确的行为,因为如果用户写了
<script>alert('hi');</script>
作为代码注释,并且Django没有逃避这个,它会执行这个JavaScript代码。但是,当Pagedown将其转换为代码标记时,它会在此部分周围添加<pre>
标记,以便代码显示为
for(var i = 0; i < 10; i++)
如何让代码部分显示正确的非转义字符,还要安全地编写它以便它不执行任意JavaScript代码?似乎我可以让Django输出保存的注释(转义),然后去unescape所有内容,然后重新转义所有非代码部分。
有更好的方法吗?
答案 0 :(得分:0)
此修复程序似乎将所有&
转换为简单&
,因此HTML实体可以在代码部分中正确呈现。然而,在它看起来像&lt;
之前会呈现为<
而不是<
变成<
。
使用此方法:
unhtmlEntityCode: function(code){
code = code.replace(/&/g, '&');
return code;
},