belun.app Блог EN

HTML в Markdown: когда и зачем конвертировать в обратную сторону

Зачем переводить HTML обратно в Markdown, что переживает обратный путь и какие крайние случаи ломают большинство конвертеров.

Экран редактора кода с преобразованием HTML-разметки в чистый текст Markdown

Обычно Markdown превращают в HTML. Обратное направление кажется странным — ровно до того момента, когда оно вдруг очень нужно.

Ситуация, которая чаще всего к этому приводит, такая: вы скопировали что-то с веб-страницы, из Google Docs или из старой CMS, а теперь хотите получить это в файле .md. Вставите сырой HTML в README — и получите стену из <div> и <span>. А хотели вы заголовок, пару абзацев и список. Этим и занимается конвертер HTML в Markdown — срезает разметку до тех немногих символов, которыми Markdown реально пользуется.

Где это всплывает

Я раз за разом натыкаюсь на одни и те же случаи.

Главный — перенос блога. WordPress, Ghost и большинство старых платформ хранят посты в HTML. Переезжаете на статический сайт вроде Astro или Hugo — и вам нужны исходники в Markdown. Конвертация экспортированного HTML проходит процентов на девяносто пути: пару постов потом всё равно поправите руками, но это правка, а не перепечатывание с нуля.

Дальше — контент, который вы вправе сохранить. Документация, которую вы сами написали, опубликованная статья, заметки, застрявшие в каком-нибудь rich-text-редакторе. Для браузера такой HTML годится, а руками его редактировать мучительно.

И мелкая ежедневная морока: вы копируете таблицу со страницы, а нужна она в документе Markdown. Перепечатывать таблицу из десяти строк — задача, после которой хочется закрыть ноутбук. Конвертер делает из неё таблицу в формате GitHub за одну вставку.

Что реально переживает преобразование

Не всё переносится чисто, и границы полезно знать заранее, до того как доверять результату.

Надёжно конвертируется вот это:

  • заголовки от <h1> до <h6>;
  • жирный, курсив, зачёркивание и строчный код;
  • ссылки и изображения;
  • нумерованные и маркированные списки, в том числе вложенные;
  • цитаты и горизонтальные линии;
  • блоки кода — а если у тега <code> стоит class="language-js", ограждение сохранит метку js.

Интереснее всего с таблицами. «Правильного» способа уложить сложную HTML-таблицу в Markdown нет: в таблицах Markdown не бывает объединённых ячеек и блочного содержимого внутри ячейки. Хороший конвертер сводит каждую ячейку к простому тексту, считает первую строку заголовком и экранирует символы |, чтобы результат не развалился. Для обычных таблиц с данными это именно то, что нужно. А таблицу, которую кто-то использовал как вёрстку страницы, перенести было нельзя изначально — тут не спасёт ни один инструмент.

Крайние случаи, которые кусаются

Пробелы — тихий вредитель. HTML при отрисовке схлопывает череду пробелов и переносов строк, а текстовый редактор — нет. Конвертер, который копирует пробелы буквально, выдаёт Markdown с лишними отступами, и парсер потом читает их как блоки кода. Лечится это так же, как делает браузер, — пробелы схлопываются. Именно так и поступает инструмент HTML в Markdown, прежде чем что-либо вывести.

Скрипты и стили — второй такой случай. Скопированный фрагмент страницы часто тащит за собой блоки <script> и <style>. Видеть их содержимое в виде текста в документе вы не хотите, поэтому они отбрасываются целиком, а не конвертируются.

А неизвестные теги — все эти обёртки <div>, <section> и <figure> — разворачиваются. Сам тег исчезает, текст внутри остаётся. Одно это правило и превращает раздутый фрагмент страницы обратно в читаемый текст.

Обратный путь не бесшовный

Стоит помнить одно: цепочка Markdown → HTML → Markdown не всегда вернёт вам ровно тот файл, с которого вы начали. В HTML больше способов выразить одно и то же, чем в Markdown, поэтому конвертеру приходится выбирать один. Жирный текст может вернуться как **, хотя изначально вы написали __. Это косметика — отрисованный результат идентичен, — но побайтного совпадения ждать не надо.

Для разовой вставки всё это неважно. Для массового переноса прогоните сначала несколько типичных страниц и посмотрите глазами на результат, прежде чем конвертировать тысячу.


Вставьте HTML в конвертер HTML в Markdown и скопируйте чистый Markdown прямо на выходе — без регистрации и без установки.

Попробуйте инструмент

HTML в Markdown →