2012-07-01 24 views
1

我在Stack Overflow中使用此处使用的Markdown编辑器的Pagedown实现,并且我的项目使用的是Django。我遇到的问题是,在Markdown代码段中的特殊字符<正在被Django转义,但后来被Pagedown视为代码并显示为&lt;Pagedown使用Django转义代码段中的特殊字符

当我输入一个代码片断,如:

for(var i = 0; i < 10; i++) 

我得到下面的正确预览。 <也正确保存在数据库中,而不是HTML实体&lt;

但是,当我在新页面上输出此评论时,Django会自动转义这些特殊字符。

for(var i = 0; i &lt; 10; i++) 

我试过关掉autoescape,但是这似乎是正确的行为,因为如果用户写道

<script>alert('hi');</script> 

作为代码评论,Django的没有逃脱这一点,那就执行这个JavaScript代码。但是,当下页转到这个转换成一个代码标签,它增加了解决此节<pre>标记,使代码显示为

for(var i = 0; i &lt; 10; i++) 

我怎样才能获得的代码段,以显示正确的转义字符,但也安全地写这个,所以它不会执行任意的JavaScript代码?看起来也许我可以让Django输出保存的注释(转义),然后去找出所有的东西,然后重新转义所有非代码部分。

有没有更好的方法来做到这一点?

回答

0

该修复程序似乎将所有&amp;转换为&,因此HTML实体在代码段中确实呈现正确。然而,在它看起来像&amp;lt;这将呈现为&lt而不是&lt;变成<

使用这种方法:

unhtmlEntityCode: function(code){ 
    code = code.replace(/&amp;/g, '&'); 
    return code; 
},