Улучшенный парсер Markdown в PHP — демо
Установите пакет композитора:
composer require erusev/parsedown
Или загрузите последнюю версию и включите Parsedown.php
$ Parsedown = new Parsedown ();
echo $ Parsedown -> text ( ' Hello _Parsedown_! ' ); # prints : < p > Hello < em > Parsedown </ em >!</ p >
Вы также можете анализировать только встроенную уценку:
echo $ Parsedown -> line ( ' Hello _Parsedown_! ' ); # prints : Hello < em > Parsedown </ em >!
Больше примеров в вики и в этом видеоуроке.
Parsedown способен экранировать ввод пользователя в генерируемом HTML. Кроме того, Parsedown будет применять очистку к дополнительным векторам сценариев (таким как места назначения ссылок сценариев), которые вводятся самим синтаксисом уценки.
Чтобы сообщить Parsedown, что он обрабатывает ненадежный пользовательский ввод, используйте следующее:
$ Parsedown -> setSafeMode ( true );
Если вместо этого вы хотите разрешить использование HTML в ненадежном пользовательском вводе, но при этом хотите, чтобы выходные данные были свободны от XSS, рекомендуется использовать средство очистки HTML, которое позволяет включать в белый список теги HTML, например HTML Purifier.
В обоих случаях вам следует серьезно рассмотреть возможность применения мер глубокоэшелонированной защиты, таких как развертывание Content-Security-Policy (функции безопасности браузера), чтобы ваша страница была в безопасности, даже если злоумышленник обнаружит уязвимость в одном из первых линии защиты выше.
Безопасный режим не обязательно дает безопасные результаты при использовании расширений Parsedown. Расширения следует оценивать самостоятельно, чтобы определить их конкретную безопасность от XSS.
ВНИМАНИЕ: этот метод не защищен от XSS!
Если вы хотите экранировать HTML в доверенном вводе, вы можете использовать следующее:
$ Parsedown -> setMarkupEscaped ( true );
Помните, что это по-прежнему позволяет пользователям вставлять небезопасные векторы сценариев, например: [xss](javascript:alert%281%29)
.
Как работает Парседаун?
Он пытается читать Markdown как человек. Сначала он смотрит на линии. Интересно, как начинаются строки. Это помогает ему распознавать блоки. Например, он знает, что если строка начинается с -
, возможно, она принадлежит списку. Как только он распознает блоки, он переходит к содержимому. Во время чтения он следит за специальными символами. Это помогает ему распознавать встроенные элементы (или встроенные строки).
Мы называем этот подход «линейным». Мы считаем, что Parsedown — первый парсер Markdown, который его использует. С момента выпуска Parsedown другие разработчики использовали тот же подход для разработки других парсеров Markdown на PHP и на других языках.
Соответствует ли он стандарту CommonMark?
Он проходит большинство тестов CommonMark. Большинство тестов, которые не проходят, касаются весьма редких случаев. Тем не менее, по мере развития CommonMark, соответствие требованиям должно улучшаться.
Кто его использует?
Laravel Framework, Bolt CMS, Grav CMS, Herbie CMS, Kirby CMS, October CMS, Pico CMS, Statamic CMS, phpDocumentor, RaspberryPi.org, Symfony Demo и другие.
Как я могу помочь?
Используйте его, отмечайте, делитесь им и, если вы чувствуете щедрость, сделайте пожертвование.
Что еще я должен знать?
Я также делаю Nota — приложение для заметок, предназначенное для локальных файлов Markdown.