Почему MarkdownSharp не кодирует мой HTML?
-
27-10-2019 - |
Вопрос
На мой взгляд, одной из самых больших целей Markdown является предотвращение того, чтобы пользователь не дает напрямую набирать потенциально неэлементный HTML.
Ну, это не совсем работает для меня в Markdownsharp.
Этот пример работает должным образом, когда у вас есть дополнительный разрыв линии сразу после "ABC" ...
Но когда этого разрыва линии нет, я думаю, что его все равно должны быть Htmlencodied, но этого не происходит здесь ...
За кулисами отображаемая наценка происходит от iframe. И это код за этим ...
<%
var md = new MarkdownSharp.Markdown();
%>
<%= md.Transform(Request.Form[0]) %>
Конечно, я что -то упускаю. О, и я использую v1.13 (последняя версия на момент написания статьи).
Изменить (это тест для реализации Stackoverflow)
азбука
это не должно быть краснымРешение 2
Поскольку стало ясно, что реализация StackOverflow содержит довольно много настроек, которые могут потребовать, чтобы проверить и выяснить, я решил пойти в другом направлении.
Я создал свой собственный упрощенный язык разметки, который является подмножеством уценки. Проект с открытым исходным кодом в http://ultralight.codeplex.com/ и вы можете увидеть рабочий пример на http://www.bucketsoft.com/ultralight/
Проект представляет собой полное решение ASP.NET MVC с редактором JavaScript. И в отличие от Markdownsharp, безопасный HTML гарантированно. Паритор JavaScript используется как на стороне клиента, так и на стороне сервера, чтобы гарантировать последовательную разметку (особая благодаря благодаря Юрский компилятор JavaScript) Это прекрасная вещь, чтобы сохранить только одну кодовую базу для этого анализатора.
Хотя проект все еще находится в бета -версии, я уже использую его на своем собственном сайте, и он, кажется, до сих пор работает хорошо.
Другие советы
Для тех, кто не хочет использовать индивидуальное решение Стива Уортима, я представил проблему и предлагаемое исправление для парней MarkdownSharp: http://code.google.com/p/markdownsharp/issues/detail?id=43
Если вы загрузите мой файл прикрепленного markdown.cs, вы найдете новую опцию, которую вы можете установить. Это остановит MarkdownSharp от повторного кодирования текста в блоках кода.
Просто не забудьте HTML кодировать ваш ввод, прежде чем передать его в уценку, а не после.
Другое решение-для HTML-тегов белого списка, как переполнение стека. Вы сделаете это после того, как передадите свой контент на уменную марку.
Смотрите это для получения дополнительной информации: http://www.codetunnel.com/blog/post/24/mardownsharp-and-coded-html
Может я не понимаю? Если вы начинаете новый кодовый блок в Markdown, во всех его сортах вам нужен двойной LineBreak и четырехместное вдательство-ни один из новичков не будет делать ни в одном из рендереров, которые мне придется передать.
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>
Теги, потому что они думают, что комментарии не должны иметь подразделения и такие вещи. (?) (В целом они должны сделать много других обработок, не так ли, например, чтобы получить синтаксис и так далее?)
РЕДАКТИРОВАТЬ: Я думаю, что люди ожидают неверной вещи в реализации. Например, как я говорю ниже, Нет такой вещи, как «недействительная отметка». Анкет Это не язык программирования или что -то вроде одного. Я подтвердил, что все три реализации отметки, которые я имею в командной строке, безразлично «преобразовать» файлы случайных .js и .c, или те, которые вставлены в иное разумное отметки, а также интерполированные zip -файлы и другие глупости - в действительный HTML, который Браузеры вообще не возражают, хотя и царапины курицы. Если вы хотите что-то исключить, например, в вики-программе, вы, конечно, делаете что-то дальше, как это делают большинство вики-программ, занимающихся уценкой.