1 вариант на мой взгляд просто ужасен, так как нам придется вызывать функцию очистки при каждой попытке отобразить статью.
Зачем? Можно же в базе хранить в базе уже обрезанный текст, в дополнительном поле (если стандартное не устраивает).
*Не понимаю, чего все так бояться добавить немного "лишних" (дополнительных) данных в БД... у Вас там гигбайты текста хранить нужно, а база работает на процессоре от калькулятора?
При надобности обрезании подобного текста есть большой риск нарушить целостность html-кода.
Не совсем понятно, что значит "риск нарушить целостность кода"? Нужно из кода что ли текст вырезать? Для этого есть другие инструменты, работающие с DOM-разметкой, они позволяют изменить HTML-элементы и их содержимое без нарушения целостности, какой-нибудь
phpQuery например (а ещё Symfony Dom Crawler, Simple HTML DOM и т.д.), если принципиально хочется извращаться над HTML-кодом...
P.S. Для HTML-редакторов, не редко случается такое, что либо пользователь навставлял какой-нибудь ерунды в код, либо сам редактор хорошенько в код нагадил... По этому, я бы всё-таки не снимал со счетов технологию "Хранение нормализованных данных вместе с оригинальными" (о которой я писал выше). Вернее будет сказать, "Хранение оригинальных данных рядом с нормализованными", если по какой-то причине они всё-таки нужны...