Lo mejor es que no permitas código HTML... sino algunas etiquetas tipo BBCode que puedes controlar fácilmente para dar formato.
Todo el texto lo pasas por una función que convierta los tags HTML como htmlentities() o htmlspecialchars()... y luego cambias los tags propios por los htmls que sí quieres mostrar.
O sea,primero limpias todo el HTML y luego conviertes tus tags propios en HTML. De esa manera el usuario sólo podrá insertar el HTML que esté permitido en tus tags. Y si inserta html, el navegador lo mostrará como código.
Te pongo un ejemplo muy simple:
Código PHP:
$texto = "Este texto contiene tags <b>html</b> y [negrita]mis propios tags[/negrita]";
$texto = htmlentities($texto);
$texto = str_replace("[negrita]", "<b>", $texto);
$texto = str_replace("[/negrita]", "</b>", $texto);
echo $texto;
Verás que el html que ingresa el usuario no le sirve... simpemente servirá lo que formatee con tus etiquetas... y de eso sí tienes control.
Saludos