10

私の考えでは、Markdown の大きな目標の 1 つは、ユーザーが不正な可能性のある HTML を直接入力するのを防ぐことです。

MarkdownSharp では、それは正確には機能しません。

この例は、「abc」の直後に余分な改行がある場合に適切に機能します... ここに画像の説明を入力

しかし、その改行がない場合は、まだ HtmlEncoded である必要があると思いますが、ここでは発生していません... ここに画像の説明を入力

バックグラウンドで、レンダリングされたマークアップは iframe から取得されます。そして、これはその背後にあるコードです...

<% 
var md = new MarkdownSharp.Markdown();
%>
<%= md.Transform(Request.Form[0]) %>

きっと何かが欠けているに違いない。ああ、私は v1.13 (これを書いている時点での最新バージョン) を使用しています。


編集 (これは StackOverflow の実装のテストです)

abc

これは赤くないはず
4

3 に答える 3

3

Steve Wortham のカスタマイズされたソリューションを使用したくない人のために、問題と提案された修正を MarkdownSharp 担当者に提出しました: http://code.google.com/p/markdownsharp/issues/detail?id=43

添付の Markdown.cs ファイルをダウンロードすると、設定できる新しいオプションが見つかります。MarkdownSharp がコード ブロック内のテキストを再エンコードするのを停止します。

後ではなく、マークダウンに渡す前に、入力を HTML エンコードすることを忘れないでください。

もう 1 つの解決策は、Stack Overflow のように HTML タグをホワイトリストに登録することです。これは、コンテンツをマークダウンに渡した後に行います。

詳細については、http ://www.CodeTunnel.com/blog/post/24/mardownsharp-and-encoded-html を参照してください。

于 2011-03-17T20:19:48.350 に答える
2

StackOverflow の実装にはかなりの数のカスタマイズが含まれていることが明らかになったので、テストと把握に時間がかかる可能性があるため、別の方向に進むことにしました。

Markdown のサブセットである独自の単純化されたマークアップ言語を作成しました。オープンソース プロジェクトはhttp://ultralight.codeplex.com/にあり、 http: //www.bucketsoft.com/ultralight/で実際の例を見ることができます。

このプロジェクトは、Javascript エディターを備えた完全な ASP.NET MVC ソリューションです。また、MarkdownSharp とは異なり、安全な HTML が保証されています。Javascript パーサーは、一貫したマークアップを保証するためにクライアント側とサーバー側の両方で使用されます (特にJurassic Javascript コンパイラーに感謝します)。そのパーサーのコードベースを 1 つだけ維持する必要があるのは素晴らしいことです。

このプロジェクトはまだベータ版ですが、私は自分のサイトで既に使用しており、今のところうまく機能しているようです。

于 2011-02-16T21:04:44.880 に答える
1

多分私は理解していませんか?Markdownで新しいコードブロックを開始する場合は、そのすべての種類で、二重の改行と4つのスペースのインデントが必要です。1つの改行は、私が渡さなければならないレンダラーでは機能しません。

abc -- Here comes a code block:

    <div style="background-color: red"> This is code</div>

降伏:

abc-ここにコードブロックがあります:

<div style="background-color: red"> This is code</div>

あなたが言っていることから、MarkdownSharpはこのルールでうまくいくように思われるので、1つの改行(ただしインデント)だけで:

 abc -- Here comes a code block:
     <div style="background-color: red"> This should be code</div>

コードブロックではなく混乱が発生します。

abc-ここにコードブロックがあります:これはコードである必要があります

StackOverflowは<div>タグを削除していると思います。なぜなら、コメントに分割などを含めるべきではないと彼らが考えているからです。(?)(一般に、構文の強調表示などを取得するために、他の多くの処理を実行する必要がありますか?)

編集: 私は人々がMarkdown実装の間違ったことを期待していると思います。たとえば、以下で説明するように、「無効なマークダウン」などはありません。プログラミング言語などではありません。コマンドラインから利用できる3つのマークダウン実装すべてが、ランダムな.jsファイルと.cファイル、または他の方法で意味のあるマークダウンに挿入されたもの、および補間されたzipファイルやその他のナンセンスを有効なhtmlに無差別に「変換」することを確認しました。ブラウザは表示をまったく気にしません-それはそうですが、チキンスクラッチです。たとえば、ウィキプログラムなどで何かを除外したい場合は、もちろん、ほとんどのマークダウンを使用するウィキプログラムと同様に、さらに何かを実行します。

于 2011-02-01T20:29:42.983 に答える