Lo que puedes hacer es crear una especie de BBCODE al principio, osea recibes el texto, remplazas los tags como <b><h1>, etc... Por BBCODE y luego lo pasas por htmlentities y por ultimo reemplaza los BBCODE por etiquetas HTML validas xD.
Seria algo así
1º - Recibo el texto
2º - Reemplazo las etiquetas <b><h1>, etc... Por BBCODE.
3º - Le aplico un htmlentities() a todo el TEXTO.
4º - Reemplazo el BBCODE por sus etiquetas equivalente en HTML.
5º - Imprimo el texto.
Saludos.
Seria algo así
1º - Recibo el texto
2º - Reemplazo las etiquetas <b><h1>, etc... Por BBCODE.
3º - Le aplico un htmlentities() a todo el TEXTO.
4º - Reemplazo el BBCODE por sus etiquetas equivalente en HTML.
5º - Imprimo el texto.
Saludos.