Осмелюсь изложить свое видение вопроса. Можно выделить две группы подходов, в пределе сводимых к следующим крайностям:
1) В базе может храниться абсолютно все. При вводе защищаемся от injections и только. При выводе действуем по сиутации и выводим это все безопасно.
2) В базе может храниться только то, что предусмотрено логикой приложения. При вводе либо просто не пускаем ничего, кроме дозволенного, либо нещадно выжигаем все неподходящее каленым железом. При выводе действуем однотипно и выводим это все красиво и быстро (безопасно получается само по построению).
На мой взгляд, оба подхода имеют право на жизнь - в зависимости от условий задачи (как справедливо заметил texrdcom). Для сообщений в гостевой я бы выбрал первый подход, а для кратких описаний товаров в магазине - второй.
И напоследок. По-моему, эта тема напрямую затрагивает извечную проблему разделения данных и представления. Так вот IMHO: если текстовые данные и любые команды форматирования (будь то HTML, bbcode или что угодно еще) хранятся вместе - это уже не plain text, а одно из представлений смеси данных с оформлением. От замены одного представления (напр., HTML) на другое (напр. bb-теги) данные от оформления волшебным образом не отделятся. К тому же, если тот же XHTML легко преобразовать в HTML с ограниченным набором тегов, plaintext или любой XML-based формат лишь стандартными функциями PHP, то bb-код везде придется хитро парсить регулярками.
Последний тезис явно спорный, но мой личный опыт его пока не опроверг...