Si no usas el htmlentities(), te arriesgas a que te metan javascript "maligno". La solucion "tipica" es implementar un sistema como los de estos foros, creando unas "etiquetas" especiales, por ejemplo [ B ] y [/ B ] (sin los espacios), que despues de pasarle el htmlentities() se sustituyen por sus etiquetas HTML. Supersimplificado:
Código PHP:
$mensaje='<strong>con etiquetas HTML</strong>[ B ]con etiquetas bbcode[ /B ]';
$texto=htmlentities($mensaje);
$texto=str_replace('[ B ]','<strong>',$texto);
$texto=str_replace('[ /B ]','</strong>',$texto);
echo $texto;
Se ha tratado en varios mensajes del foro, y en
http://pear.php.net ya hay una clase que "traduce" de bbcode a HTML.
Saludos.