Почему MarkdownSharp не кодирует мой HTML? - PullRequest
10 голосов
/ 01 февраля 2011

На мой взгляд, одна из главных целей Markdown - не дать пользователю вводить потенциально искаженный HTML напрямую.

Ну, это не совсем подходит для меня в MarkdownSharp.

Этот пример работает правильно, когда у вас есть дополнительный разрыв строки сразу после "abc" ... enter image description here

Но когда этого разрыва строки нет, я думаю, что он все еще должен быть HtmlEncoded, но здесь этого не происходит ... enter image description here

За кулисами визуализированная разметка исходит из iframe. И это код позади него ...

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

Конечно, я что-то упускаю. О, и я использую v1.13 (последняя версия на момент написания статьи).


РЕДАКТИРОВАТЬ (это тест для реализации StackOverflow)

а

это не должно быть красным

Ответы [ 3 ]

3 голосов
/ 17 марта 2011

Для тех, кто не хочет использовать индивидуальное решение Стива Уортама, я отправил вопрос и предлагаем исправление для ребят из MarkdownSharp: http://code.google.com/p/markdownsharp/issues/detail?id=43

Если вы скачаете мой прикрепленный файл Markdown.cs, вы найдетеновая опция, которую вы можете установить.Это остановит MarkdownSharp от перекодирования текста в блоках кода.

Только не забудьте HTML кодировать ваш ввод ДО того, как вы передадите его в markdown, а НЕ после.

Другое решение состоит вHTML-теги белого списка, такие как Stack Overflow.Вы должны сделать это ПОСЛЕ того, как вы передадите свой контент на уценку.

См. Это для получения дополнительной информации: http://www.CodeTunnel.com/blog/post/24/mardownsharp-and-encoded-html

2 голосов
/ 17 февраля 2011

Поскольку стало ясно, что реализация StackOverflow содержит довольно много настроек, которые могут потребовать много времени для тестирования и выяснения, я решил пойти другим путем.

Я создал свой собственный упрощенный язык разметки, который является подмножествомуценки.Проект с открытым исходным кодом находится на http://ultralight.codeplex.com/, а рабочий пример можно посмотреть на http://www.bucketsoft.com/ultralight/

. Проект представляет собой законченное решение ASP.NET MVC с редактором Javascript.И в отличие от MarkdownSharp, безопасный HTML гарантирован.Парсер Javascript используется как на стороне клиента, так и на стороне сервера, чтобы гарантировать согласованную разметку (особенно благодаря компилятору Jurassic Javascript ).Прекрасно иметь только одну кодовую базу для этого парсера.

Несмотря на то, что проект все еще находится в бета-версии, я уже использую его на своем собственном сайте, и, похоже, он пока работает хорошо.

1 голос
/ 01 февраля 2011

Может я не понимаю? Если вы начинаете новый блок кода в Markdown, во всех его разновидностях вам нужен двойной перевод строки и отступ в четыре пробела - ни один перевод строки не подойдет ни для одного из рендеров, которые мне нужно рука.

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 прекрасно справляется с этим правилом, поэтому с одной новой строкой (но с отступом):

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

мы получаем беспорядок, а не блок кода:

abc - здесь идет блок кода: Это должен быть код

Я предполагаю, что StackOverflow удаляет теги <div>, потому что они думают, что в комментариях не должно быть разделений и подобных вещей. (?) (Как правило, им приходится выполнять много другой обработки, например, для выделения синтаксиса и т. Д.?)

РЕДАКТИРОВАТЬ: Я думаю, что люди ожидают не то, что реализация Markdown. Например, как я говорю ниже, не существует такой вещи, как «недействительная уценка» . Это не язык программирования или что-то подобное. Я проверил, что все три реализации разметки, которые у меня есть из командной строки, безразлично «конвертируют» случайные файлы .js и .c, или те, которые вставлены в понятную иным образом разметку, а также интерполировали zip-файлы и другую ерунду - в действительный HTML браузеры не против отображения вообще - куриные царапины, хотя это так. Если вы хотите что-то исключить, например, Конечно, в вики-программе вы делаете что-то еще, как и большинство вики-программ, использующих уценку.

...