2009-07-28 22 views
9

sto usando wmd editor di Markdown su un progetto e aveva una domanda:WMD markdown Editor - HTML alla conversione Markdown

Quando inserisco il modulo che contiene l'area di testo Markdown, esso (come previsto) i messaggi HTML per il server . Tuttavia, per quanto riguarda la convalida sul lato server, qualcosa non va a buon fine e ho bisogno di inviare l'utente indietro per modificare la propria voce, è comunque necessario riempire la textarea con solo il markdown e non l'html? Dal momento che come ho impostato, il server ha solo accesso ai dati del post (che è sotto forma di html), quindi non riesco a pensare a un modo per farlo. Qualche idea? Preferibilmente una soluzione non javascript.

Aggiornamento: Ho trovato un convertitore da markdown in html denominato markdownify. Immagino che questa potrebbe essere la soluzione migliore per mostrare il markdown all'utente ... ogni alternativa migliore è la benvenuta!

Aggiornamento 2: Ho trovato this post su SO e immagino che ci sia un'opzione per inviare i dati al server come markdown invece di html. Ci sono dei lati negativi semplicemente archiviando i dati come markdown nel database? Che ne dici di mostrarlo all'utente (al di fuori di un editor)? Forse sarebbe meglio inviare entrambe le versioni (html e Markdown) al server ...

RISOLTO: posso semplicemente usare php markdown per convertire il mark-down in html serverside.

risposta

4

Suggerisco semplicemente di inviare e memorizzare il testo come Markdown. Questo sembra essere quello su cui ti sei già stabilito. IMO, memorizzando il testo come Markdown sarà migliore perché puoi rimuovere in modo sicuro tutti i tag HTML senza preoccuparti della perdita di formattazione - questo rende il tuo codice più sicuro, perché sarà più difficile usare un attacco XSS (anche se potrebbe essere ancora possibile - Sto solo dicendo che questa parte sarà sicura e).

+0

Non sarebbe rimuovere tutti i tag HTML causa un problema se il testo conteneva un esempio HTML? –

+0

Forse, ma poi si tratta solo di assicurarsi di non rimuovere alcun tag dall'interno di un blocco di codice. –

+1

Solo HTML lo codifica. Non penso che nessuno dei caratteri markdown sia riservato in html. –

2

Una cosa da considerare è che WMD sembra avere alcuni casi limite diversi da determinate implementazioni Markdown sul lato server. Ho sicuramente visto alcune stranezze nelle anteprime qui che si sono manifestate in modo diverso dopo la sottomissione (credo che uno di questi casi stesse tentando di sfuggire a un apice circondato da apici inversi). Inviando l'anteprima convertita sul filo, è possibile assicurarsi che l'anteprima sia accurata.

Non sto dicendo che dovrebbe prendere una decisione, ma è qualcosa da considerare.

0

Prova Pandoc. È un po 'più completo e affidabile di Markdownify.

0

L'HTML che stai vedendo è solo un'anteprima, quindi non è una buona idea archiviarlo nel database in quanto ti imbatterai in problemi quando proverai a modificare. Inoltre, non è una buona idea memorizzare entrambe le versioni (markdown e HTML) in quanto l'HTML è solo un'interpretazione e si avranno gli stessi problemi di modifica e di mantenimento di entrambe le versioni sincronizzate.

Quindi l'idea migliore è quella di memorizzare il markdown nel db e quindi convertirlo sul lato server prima di visualizzarlo.

È possibile utilizzare PHP Markdown per questo scopo. Tuttavia questa conversione non è perfetta al 100% di quello che stai vedendo sul lato javascript e potrebbe aver bisogno di qualche ritocco.

La versione utilizzata da Stack Exchange network è un'implementazione in C# e dovrebbe esserci un'implementazione python scaricata con la versione di wmd che si possiede.

L'unica cosa che ho ottimizzato è stato il modo in cui le nuove linee sono state rese così ho cambiato questo markdown.php per convertire alcune nuove linee in <br> a partire dalla linea 626 nella versione che ho:

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); 
}