Ну CODE это хорошо, а вообще почему никак иначе?
Ну потому, что htmlspecialchars обработает и символ &, и символы кавычек. При этом, это затронет не только текст комментария, но и размещенные в нем теги, а например, в том же теге QUOTE используются кавычки. Во-вторых, если в тексте будут ссылки с параметрами, то в них & будет заменен на &, и это повлечет за собой необходимость коррекции всех регулярных выражений, обрабатывающих ссылки. Да и чем вариант с CODE не устраивает?
Да и ввод-вывод у нас как организован? Пришло сообщение, мы его обработали, выкинули то, что посчитали лишним (запрещенные пользователю или неподдерживаемые BBCode, HTML-разметку и т.д.), сделали замену некоторых символов (например три точки на троеточие или два минуса на тире), и сохранили в БД. При отображении - запустили обработчик BBCode, он заменил теги на HTML-код, показали пользователю.
Теперь, если мы HTML вырезать не будем, то нам перед выводом надо вызывать htmlspecialchars. Но в какой момент? До обработки BBCode - попортим часть символов, после - попортим код, который вставился вместо BBCode. Устраивать танцы с бубном, перед заменой убирая весь HTML в закрома, а потом возвращая - это лишняя нагрузка на сервер при отображении. Которая, причем, будет выполняться при каждом обращении. И зачем это нужно?