@sitnik_ru распарсить HTML AST любым DOM парсером, взять все как текст с фичами уровня markdown, вставить в свой шаблон.
Грубый пример - превратить весь текст в обычный текст (без форматирования и стилей), из картинок брать только урлы и тайтлы, из ссылок только текст, урл и тайтл.
Принципиальное отличие в том, что мы берем данные (а не разметку) и потом их как-то форматируем. От исходного HTML не берем ничего
@vitonsky но DOMPurify ровно это и делает, парсит DOM и вырезает всё ненужное по белому списку.
XSS-атаки в основном строятся на том, что парсер начнёт сбоить и не увидит тега или аргумента.
Все эти же атаки протащат эти невидимы аргументы до Markdown-генератора и попадут в HTML выход из него.