Markdown в HTML
Конвертируйте Markdown в HTML с поддержкой синтаксиса GitHub Flavored Markdown — таблицы, списки задач, блоки кода и зачёркивание. Живой предпросмотр отображается в изолированном фрейме, поэтому ничто из вставленного не может выполниться.
- Файлы никогда не покидают ваше устройство
- Бесплатно, без регистрации
- Без водяных знаков
- Работает офлайн после загрузки
Как пользоваться: markdown в html
- 1
Введите или вставьте Markdown
HTML-код и предпросмотр обновляются по мере ввода.
- 2
Проверьте предпросмотр
Он отображается в изолированном фрейме, поэтому вставленный контент не может запускать скрипты.
- 3
Скопируйте HTML
Скопируйте разметку или скачайте её в виде файла .html.
CommonMark против GitHub Flavored Markdown
Markdown начинался как формат с нестрогой спецификацией, без единой авторитетной грамматики, из-за чего разные реализации расходились в пограничных случаях — как должны вести себя вложенные списки, считаются ли подчёркивания внутри слова выделением, — причём нередко так, что из одного и того же исходного текста получался по-настоящему разный результат рендеринга. CommonMark появился именно для того, чтобы это исправить, определив единую точную и однозначную спецификацию, которой обязан строго следовать любой соответствующий ей парсер. GitHub Flavored Markdown (GFM) строится поверх этой основы CommonMark и добавляет несколько расширений, которых обычный CommonMark вообще не определяет: таблицы, построенные из символов вертикальной черты и строки-разделителя из дефисов, чекбоксы списков задач, записываемые как `- [ ]` и `- [x]`, зачёркнутый текст, заключённый в двойные тильды, и автоматическое превращение голых URL в ссылки без явного синтаксиса ссылок. Именно диалект GFM реализован в этом инструменте, потому что на нём стандартизировались GitHub, Reddit и подавляющее большинство генераторов статических сайтов и инструментов документации, что делает его самой универсальной целью для всего, что пишется для чтения где-то ещё.
От чего защищает изолированный предпросмотр, а от чего — нет
Синтаксис Markdown намеренно допускает встраивание необработанного HTML прямо внутрь текста — это сделано специально и позволяет авторам Markdown вставлять встроенный контент, определённое выравнивание или элемент оформления, для которого у самого синтаксиса Markdown нет короткой записи. Риск в том, что тег `<script>` или встроенный обработчик события вроде `onerror=`, вставленный в ненадёжный Markdown, в обычной ситуации выполнился бы в том контексте, где он отображается, — а это реальный вектор межсайтового скриптинга, если Markdown пришёл не от того человека, который просматривает предпросмотр. Отображение живого предпросмотра внутри изолированного iframe с отключённым выполнением скриптов означает, что любой такой тег script или обработчик события в предпросмотре просто не выполняется — браузер отказывается выполнять код внутри корректно изолированного фрейма, ограничивая риск этим изолированным предпросмотром.
Чего изоляция не делает, так это не санитизирует *сгенерированный HTML-код*, который этот инструмент выдаёт вам для копирования, — этот текстовый результат по-прежнему содержит весь необработанный HTML, присутствовавший в исходном Markdown, в точности сохранённый, как и предполагает спецификация Markdown. Если этот сгенерированный HTML будет вставлен на действующую страницу, отображающую контент от ненадёжного автора, перед публикацией потребуется отдельный проход санитизации на сервере — это отдельный шаг, не имеющий отношения к тому, что делает изоляция предпросмотра.
Почему Markdown вообще допускает необработанный HTML
Markdown был сознательно спроектирован как сокращённая запись для тех конструкций HTML, к которым авторы прибегают чаще всего, — заголовков, ссылок, выделения текста, списков, — а не как полноценная замена всех возможностей HTML. Всё, для чего у собственного синтаксиса Markdown нет эквивалента — от конкретного встроенного стиля до вставленного видео, — задумано писать как обычный HTML прямо внутри исходного текста Markdown, и парсер передаёт это без изменений, а не отклоняет как недопустимое. Это осознанное проектное решение, восходящее к исходной спецификации Markdown, а не пробел или недосмотр в какой-то конкретной реализации.
Часто задаваемые вопросы
Какой диалект Markdown поддерживается?
GitHub Flavored Markdown: таблицы, блоки кода, списки задач, зачёркивание и автоматические ссылки поверх ядра CommonMark. Это диалект, который используют GitHub, Reddit и большинство генераторов статических сайтов.
Безопасно ли вставлять Markdown из ненадёжного источника?
Предпросмотр отображается в изолированном iframe с отключённым выполнением скриптов, поэтому встроенные теги `<script>` и обработчики событий выполняться не могут. Учтите, что *сгенерированный HTML* по-прежнему содержит весь необработанный HTML, который был в вашем Markdown, — санитизируйте его на сервере перед публикацией контента, который написали не вы.
Поддерживается ли необработанный HTML внутри Markdown?
Да — Markdown допускает встроенный HTML, и он передаётся без изменений. Именно поэтому важно предупреждение о санитизации выше, если источник ненадёжен.
Почему моя таблица не отображается?
Таблицам GFM нужна строка-разделитель из дефисов под заголовком, а если таблица идёт сразу после абзаца — ещё и пустая строка перед ней. Отсутствие всего одной вертикальной черты в строке-разделителе незаметно превращает всю таблицу обратно в обычный текст.