Работа с Markdown в PHP: библиотеки и инструменты
Markdown — это облегчённый язык разметки, созданный для быстрого форматирования текста без необходимости писать сложный HTML. На образовательном портале PythonLib мы часто сталкиваемся с задачей преобразования Markdown-разметки в чистый HTML для отображения статей, документации и комментариев. PHP, как серверный язык, предлагает несколько зрелых решений для этой задачи. В этой статье мы рассмотрим три самые популярные библиотеки, их установку, базовое использование и особенности.
Зачем нужен парсер Markdown в PHP?
Markdown удобен для авторов контента, но браузеры не понимают его напрямую. Поэтому на сервере необходимо преобразовывать Markdown в HTML. Дополнительные преимущества использования библиотек:
- Безопасность: корректная обработка HTML-тегов и предотвращение XSS-атак.
- Гибкость: поддержка расширений (таблицы, сноски, математические формулы).
- Производительность: кэширование результатов и быстрая конвертация.
1. Parsedown — самый простой и быстрый
Parsedown — это одноклассовая библиотека, которая не требует зависимостей. Она идеально подходит для небольших проектов и новичков.
Установка
composer require erusev/parsedown
Пример использования
<?php
require_once 'vendor/autoload.php';
$Parsedown = new Parsedown();
$markdown = "# Заголовок\n\nЭто **жирный** текст и *курсив*.";
$html = $Parsedown->text($markdown);
echo $html;
?>
Результат: корректный HTML с тегами <h1>, <strong>, <em>. Parsedown автоматически экранирует опасные HTML-теги, если они не являются частью разметки Markdown.
Настройка безопасного режима
$Parsedown->setSafeMode(true); // Отключает HTML в Markdown
2. League/CommonMark — соответствие стандарту
Библиотека от The PHP League реализует официальный стандарт CommonMark. Она поддерживает расширения (таблицы, зачёркнутый текст) и строго следует спецификации.
Установка
composer require league/commonmark
Базовое использование
<?php
use League\CommonMark\Environment\Environment;
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
use League\CommonMark\MarkdownConverter;
$environment = new Environment();
$environment->addExtension(new CommonMarkCoreExtension());
$converter = new MarkdownConverter($environment);
$markdown = "| Таблица | Столбец |\n|---------|---------|\n| Ячейка 1 | Ячейка 2 |";
$html = $converter->convert($markdown);
echo $html;
?>
Расширенные возможности
Вы можете подключать дополнительные расширения:
use League\CommonMark\Extension\Table\TableExtension;
use League\CommonMark\Extension\Strikethrough\StrikethroughExtension;
$environment->addExtension(new TableExtension());
$environment->addExtension(new StrikethroughExtension());
Это позволяет обрабатывать таблицы и зачёркнутый текст (~~текст~~).
3. cebe/markdown — лёгкая альтернатива
Библиотека cebe/markdown от Carsten Brandt отличается модульностью. Вы можете использовать только нужные парсеры (например, только для списков или заголовков).
Установка
composer require cebe/markdown
Пример с парсером MarkdownExtra
<?php
use cebe\markdown\MarkdownExtra;
$parser = new MarkdownExtra();
$markdown = "Текст с ~~зачёркиванием~~ и сноской[^1].\n\n[^1]: Текст сноски.";
$html = $parser->parse($markdown);
echo $html;
?>
MarkdownExtra поддерживает сноски, таблицы и атрибуты (например, {.class}).
Сравнение библиотек
| Критерий |
Также в библиотекеРекомендаций |
|---|