1

我正在使用 Stack Overflow 上使用的 Markdown 编辑器的 Pagedown 实现,而我的项目正在使用 Django。我遇到的问题是,像<Markdown 代码部分中的特殊字符被 Django 转义,但随后被 Pagedown 视为代码并显示为&lt;.

当我键入如下代码片段时:

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

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

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

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

我试过关闭自动转义,但这似乎是正确的行为,因为如果用户写

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

作为代码注释,Django 并没有对此进行转义,它会执行这段 JavaScript 代码。但是,当 Pagedown 将其转换为代码标记时,它会<pre>在此部分周围添加标记,以便代码显示为

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

我怎样才能让代码部分显示正确的未转义字符,但还要安全地编写它,这样它就不会执行任意 JavaScript 代码?似乎我可以让 Django 输出保存的注释(转义),然后转义所有内容,然后重新转义所有非代码部分。

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

4

1 回答 1

0

该修复似乎将所有内容都&amp;变成了 simple &,因此 HTML 实体确实在代码部分中正确呈现。然而,在它看起来像&amp;lt;which 会呈现 as&lt而不是&lt;变成<.

使用了这个方法:

unhtmlEntityCode: function(code){
    code = code.replace(/&amp;/g, '&');
    return code;
},
于 2012-07-01T22:08:05.173 回答