La combinación nl2br+htmlentities se recomienda no por seguridad sino para limpiar datos (y no guardar HTML en la base de datos, o para facilitar la muestra de esos datos luego)
La función de htmlentities es convertir caracteres no ascii a entidades HTML.
Por ejemplo, convierte "á" en "á".
Como debe buscar más caracteres y hacer más sustituciones, es más lenta que mysql_real_escape_string. Esta última va a sustituir solamente los caracteres que necesite sustituir.
Una de las cosas que tenés que comprobar en campos de texto de una sola línea, es que no te introduzcan caracteres de salto de línea (por lo que mencionaba antes de las inyecciones de cabeceras cuando el formulario es usado como fuente de datos para correo electrónico). htmlentities no te va a servir de nada en ese caso, manualmente tenés que eliminar los caracteres \r y \n.
Como casi todo en programación, hay varias maneras de hacer lo mismo. Yo simplemente te comento que htmlentities no es la opción ideal y que su función no es la seguridad. Eso no quiere decir que no funcione
Saludos.