1

ここでスタック オーバーフローで使用されている 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;が単に&に変わっているように見えるため、HTML エンティティはコード セクションで適切にレンダリングされます。ただし、以前は、 に変わるのではなく、&amp;lt;としてレンダリングされるように見えます。&lt&lt;<

この方法を使用しました:

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