ОК, решил как-то.
Использовал библиотеку HTMLCleaner для анализа входных данных в допустимом формате.
Затем я использую синтаксический анализатор DOM, чтобы перебрать все и убрать все запрещенные теги и атрибуты.
(и несколько мелких уродливых хаков;))
Это было много работы.