Да, заменяю спецсимволы, а почему это ошибка?
То, что ты называешь "заменой спецсимволов", это на самом деле форматирование. В HTML текстовый символ "<" обозначается "<", потому что html - это такой язык, в другом языке иначе. Форматировать надо в контексте вывода HTML, а не когда-то там заранее, по множеству причин:
1) хранятся уже не чистые данные, а html-представление. Чистые данные уже испорчены.
2) если тебе понадобится отправить plain text-письмо или сгенерировать pdf, придется заниматься ерундой в виде обратного преобразования
3) форматирование html у тебя находится в том месте, где никакого вывода html нет. Очень легко забыть это сделать и получить xss-уязвимость, причина которой находится совершенно в другом куске кода.
Если ты пишешь шаблоны вручную на php, используй htmlspecialchars непосредственно при выводе. Обычно люди используют template engines типа twig, которые делают это автоматически (это называется автоэкранирование).
А, и еще (уже про другое). Код надо оформлять по PSR-стандартам (PSR-1, PSR-2). Нормальные IDE (такие как PhpStorm, Netbeans) умеют делать это автоматически.