Есть ли реализация PHP для уценки, подходящая для использования в публичных комментариях?
В принципе, он должен допускать только подмножество синтаксиса уценки (жирный, курсив, ссылки, кавычки, кодовые блоки и списки) и вырезать весь встроенный HTML (или, возможно, избежать его?)
Я предполагаю, что один из вариантов - использовать обычный анализатор разметки и запускать вывод через HTML-санитор, но есть ли лучший способ сделать это.?
Мы используем PHP markdown Extra для остальной части сайта, поэтому нам уже придется использовать вторичный парсер (вариант "Extra", поскольку такие вещи, как поддержка сносок, не нужны). Это также кажется лучше разбираться только в тексте *bold*
и иметь все, что ушло в <a href="etc">
, чем генерировать текст <b>bold</b>
и пытаться разбить биты, которые нам не нужны.
Кроме того, в соответствующей заметке мы используем элемент управления ОМУ для "основного" сайта, но для комментариев, какие существуют другие варианты? Предварительный просмотр javascript WMD хорош, но для него потребуется такая же "стерилизация", как процессор уценки PHP (он не может отображать изображения и т.д., Иначе кто-то подаст, и их рабочая уценка "сломается" )
В настоящее время я планирую использовать метод santiser PHP-markdown → HTML и редактировать WMD для удаления синтаксиса изображения/заголовка из showdown.js
- но похоже, что это было сделано бесчисленное количество раз до этого.
В принципе:
- Есть ли "безопасная" реализация уценки в PHP?
- Есть ли редактор уценки HTML/javascript, который может иметь одинаковые параметры, которые легко отключить?
Обновление: Я закончил просто запуск вывода markdown()
через HTML очиститель.
Таким образом, рендеринг Markdown был отделен от выпускаемой санитарии, что намного проще (две в основном немодифицированные кодовые базы) более безопасны (вы не пытаетесь сделать одновременно рендеринг и санитацию) и более гибкими (вы можете имеют несколько уровней санитарии, говорят более слабую конфигурацию для доверенного контента и гораздо более строгую версию для публичных комментариев)