表示されている 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);
}