Если вы разрешаете пользователю вводить HTML-код, вам нужно решить гораздо более серьезную проблему, чем несколько невыпадающих угловых скобок; HTML действительно сложно проверить и правильно фильтровать, и если вы не сделаете это правильно, вы откроете себя для атак XSS. Я написал библиотеку, которая делает это; кто-то еще уже разместил ссылку на него здесь, поэтому я не буду повторять.
Однако, чтобы ответить на ваш вопрос, самый надежный способ преобразования скошенных угловых скобок в их экранированные формы - это разбор HTML с помощью DOM / libxml, а затем повторная инициализация. Все, что использует регулярные выражения или такие, будет обречено на неудачу по краю. Вы также можете написать свой собственный синтаксический анализатор, но это также требует немного работы.