2009-07-28 3 views
9

Я использую wmd редактор уценки на проекте, и возник вопрос:ВРС уценки редактор - HTML для преобразования Markdown

Когда я отправляю форму, содержащую уценки текстовую область, он (как и ожидалось) сообщения HTML на сервер , Однако, скажем, при проверке на стороне сервера что-то терпит неудачу, и мне нужно отправить обратно пользователя, чтобы отредактировать их запись, есть ли все равно, чтобы пополнить текстовое поле только уценкой, а не с html? Поскольку, поскольку я настроил его, сервер имеет доступ только к данным сообщения (который находится в форме html), поэтому я не могу представить, как это сделать. Есть идеи? Предпочтительно решение, основанное на javascript.

Обновление: Я нашел html для конвертера с разделителем под названием markdownify. Я думаю, это может быть лучшим решением для отображения уценки обратно пользователю ... любые лучшие альтернативы приветствуются!

Обновление 2: Я нашел this пост на SO, и, я думаю, есть возможность отправить данные на сервер как уценку вместо html. Есть ли недостатки для простого хранения данных в виде уценки в базе данных? Как отобразить его обратно пользователю (вне редактора)? Может быть, было бы лучше, чтобы получить возможность отправлять обе версии (HTML и уценки) на сервер ...

РЕШИТЬ: я могу просто использовать php markdown для преобразования уценки в HTML ServerSide.

ответ

4

Я предлагаю вам просто отправить и сохранить текст в виде Markdown. Кажется, это то, о чем вы уже договорились. IMO, сохраняя текст как Markdown, будет лучше, потому что вы можете безопасно отключить все HTML-теги, не беспокоясь о потере форматирования - это делает ваш код более безопасным, потому что будет сложнее использовать атаку XSS (хотя это все еще возможно, хотя - Я только говорю, что эта часть будет безопасной er).

+0

Не был бы удаление всех тегов HTML вызывает проблему, если текст содержит пример HTML? –

+0

Возможно, но это только вопрос того, чтобы вы не лишали никаких тегов изнутри блока кода. –

+1

Просто HTML кодирует его. Я не думаю, что любой из символов уценки зарезервирован html. –

2

Следует учесть, что у ОМД есть определенные разные случаи кросс от определенных реализаций Markdown на стороне сервера. Я определенно видел некоторые причуды в превью здесь, которые проявились по-разному после представления (я считаю, что один такой случай пытался избежать обратного хода, окруженного обратными окнами). Отправляя преобразованный предварительный просмотр по проводу, вы можете убедиться, что предварительный просмотр является точным.

Я не говорю, что это должно принять ваше решение, но это то, что нужно учитывать.

0

Попробуйте Пандока. Это немного более всеобъемлющий и надежный, чем Markdownify.

0

HTML, который вы видите, является просто предварительным просмотром, поэтому не рекомендуется хранить это в базе данных, поскольку вы будете сталкиваться с проблемами при попытке редактировать. Также не рекомендуется хранить обе версии (markdown и HTML), поскольку HTML - это просто интерпретация, и у вас будут те же проблемы с редактированием и синхронизацией обеих версий.

Итак, лучше всего сохранить уценку в db, а затем преобразовать ее на стороне сервера перед отображением.

Для этой цели вы можете использовать PHP Markdown. Однако это не 100% идеальное преобразование того, что вы видите на стороне javascript, и может потребоваться некоторая настройка.

Версия, которую использует Stack Exchange network, является реализацией C# и должна быть реализована реализация python с версией wmd, которую вы имеете.

Единственное, что я отлажены был путь новые линии были оказаны, поэтому я изменил это в markdown.php, чтобы преобразовать некоторые новые строки в <br> начиная от линии 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); 
}