Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас

Markdown у HTML

Перетворити Markdown на HTML із санітизацією

Дані надсилаються на сервер, але не зберігаються

Цей інструмент не можна виконати у браузері, тому введені дані надсилаються на наш сервер. Ми обробляємо їх у пам'яті та одразу повертаємо результат: нічого не записується в базу, у файли чи в логи, нічого не передається третім сторонам. Та все ж не вставляйте сюди справжні робочі паролі чи ключі - для чутливих даних краще скористатися локальними інструментами.

Поділитись

Що робить цей інструмент

Перетворює Markdown на HTML тим самим CommonMark, яким рендерить статті цей сайт. Тому результат тут - буквально те, що з'явиться в блозі, а не приблизна оцінка іншим парсером.

Перемикач санітизації показує другу половину картини: що саме вирізає sanitizeHtml() перед публікацією.

Markdown у Laravel

// Хелпер Str: рендерить CommonMark
Str::markdown('## Заголовок');

// Через плинний рядок
str($post->content)->markdown()->sanitizeHtml();
{{-- У Blade: обов'язково через {!! !!}, бо це вже HTML --}}
<x-prose>{!! str($post->content)->markdown()->sanitizeHtml() !!}</x-prose>
// Листи в Markdown - окрема, старіша механіка
public function content(): Content
{
    return new Content(markdown: 'mail.orders.shipped');
}

Санітизація - не косметика

Str::markdown() за замовчуванням пропускає сирий HTML із тексту. Це правильна поведінка для CommonMark і небезпечна для контенту, який пише не тільки редакція.

// Якщо $content від користувача - це XSS
{!! Str::markdown($content) !!}

// Правильно
{!! str($content)->markdown()->sanitizeHtml() !!}

sanitizeHtml() лишає безпечні теги - заголовки, списки, посилання, код - і вирізає <script>, обробники подій (onclick), javascript: у посиланнях та <iframe>. Спробуйте перемкнути прапорець вище на прикладі: скрипт зникає, решта розмітки лишається.

Саме тому попередній перегляд на цій сторінці показується лише для санітизованого варіанту: показати сирий HTML як текст - це сенс інструмента, вставити його у власну сторінку - те, від чого санітизація й захищає.

Що ще вміє CommonMark у Laravel

// Свої налаштування рендерера
Str::markdown($text, [
    'html_input' => 'strip',        // вирізати HTML ще на етапі парсингу
    'allow_unsafe_links' => false,  // прибрати javascript: посилання
]);

'html_input' => 'strip' - альтернатива санітизації після рендеру: HTML не потрапляє у вивід взагалі. Якщо користувачам не потрібен жоден HTML, це простіший і надійніший шлях.

Розширення CommonMark

Базовий CommonMark не має таблиць, закреслень і автопосилань - це розширення GitHub Flavored Markdown. Laravel підключає GFM за замовчуванням, тому таблиці й -блоки працюють.

Чого немає без додаткових розширень: виносок, списків задач - [ ], підсвітки синтаксису на сервері. Останнє на цьому сайті робить highlight.js уже в браузері - тому в HTML ви побачите звичайний <pre><code>, а кольори з'являються після завантаження сторінки.