9

プロジェクトでwmdマークダウンエディターを使用していますが、質問がありました。

マークダウンテキスト領域を含むフォームを投稿すると、(予想どおり)サーバーにhtmlが投稿されます。ただし、サーバー側の検証時に何かが失敗し、エントリを編集するためにユーザーを送り返す必要がある場合、HTMLではなくマークダウンだけでテキストエリアを補充する方法はありますか?私が設定したので、サーバーは投稿データ(htmlの形式)にしかアクセスできないので、これを行う方法を考えることができないようです。何か案は?できれば、JavaScriptベースではないソリューション。

更新:markdownifyと呼ばれるhtmlからマークダウンへのコンバーターを見つけました。これは、マークダウンをユーザーに表示するための最良の解決策かもしれないと思います...より良い代替案は大歓迎です!

更新2: SOでこの投稿を見つけました。データを、htmlではなくマークダウンとしてサーバーに送信するオプションがあると思います。単にデータをマークダウンとしてデータベースに保存することの欠点はありますか?それを(エディターの外で)ユーザーに表示するのはどうですか?たぶん、両方のバージョン(htmlとマークダウン)をサーバーに投稿するのが最善でしょう...

解決済み:phpマークダウンを使用して、マークダウンをhtmlサーバーサイドに変換できます。

4

4 に答える 4

4

テキストをMarkdownとして送信して保存することをお勧めします。これはあなたがすでに決めたもののようです。IMO、テキストを Markdown として保存する方が、書式設定の損失を心配することなくすべての HTML タグを安全に削除できるため、より優れています。これにより、XSS 攻撃を使用するのが難しくなるため、コードがより安全になります (それでも可能かもしれませんが) - この部分がより安全になると言っているだけです)

于 2009-07-29T06:24:46.783 に答える
2

考慮すべきことの 1 つは、WMD には、特定のサーバー側の Markdown 実装とは異なる特定のエッジ ケースがあるように見えるということです。ここのプレビューで、提出後に異なって表示されるいくつかの癖を確かに見ました(そのようなケースの1つは、バックティックに囲まれたバックティックをエスケープしようとしたと思います)。変換されたプレビューをネットワーク経由で送信することにより、プレビューが正確であることを確認できます。

それがあなたの決定を下すべきだと言っているわけではありませんが、それは考慮すべきことです.

于 2009-07-29T06:37:45.993 に答える
0

Pandocを試してみてください。Markdownify よりも少し包括的で信頼性があります。

于 2010-05-20T09:07:02.527 に答える
0

表示されている HTML は単なるプレビューであるため、編集しようとすると問題が発生するため、データベースに保存することはお勧めできません。また、両方のバージョン (マークダウンと HTML) を保存することもお勧めできません。HTML は単なる解釈であり、両方のバージョンを編集して同期させると同じ問題が発生するからです。

したがって、マークダウンをデータベースに保存し、サーバー側で変換してから表示することをお勧めします。

この目的には、PHP Markdownを使用できます。ただし、これは JavaScript 側で表示されているものを 100% 完全に変換したものではなく、微調整が必​​要になる場合があります。

Stack Exchange ネットワークが使用しているバージョンは C# 実装であり、使用している wmd のバージョンでダウンロードした Python 実装が存在するはずです。

<br>私が微調整したことの1つは、新しい行がレンダリングされる方法だったので、markdown.phpでこれを変更して、私が持っているバージョンの626行目から始まるようにいくつかの新しい行を変換しました:

var $span_gamut = array(
#
# These are all the transformations that occur *within* block-level
# tags like paragraphs, headers, and list items.
#
    # Process character escapes, code spans, and inline HTML
    # in one shot.
    "parseSpan"           => -30,

    # Process anchor and image tags. Images must come first,
    # because ![foo][f] looks like an anchor.
    "doImages"            =>  10,
    "doAnchors"           =>  20,
    
    # Make links out of things like `<http://example.com/>`
    # Must come after doAnchors, because you can use < and >
    # delimiters in inline links like [this](<url>).
    "doAutoLinks"         =>  30,
    "encodeAmpsAndAngles" =>  40,

    "doItalicsAndBold"    =>  50,
    "doHardBreaks"        =>  60,
    "doNewLines"          =>  70,
    );

function runSpanGamut($text) {
#
# Run span gamut tranformations.
#
    foreach ($this->span_gamut as $method => $priority) {
        $text = $this->$method($text);
    }

    return $text;
}

function doNewLines($text) {
    return nl2br($text);
}
于 2011-05-09T11:50:09.700 に答える