Filtrar datos que el usuario envía en un formulario

Hola!

La seguridad a la hora de tratar con los datos que un usuario envía mediante un formulario es siempre importante. Yo suelo utilizar la función strip_tags() para eliminar cualquier etiqueta HTML que alguien pudiera introducir pero... no sé si es la manera correcta.
Un ejemplo:
<?php

$str = "<h1>Esto es un encabezado</h1>";

echo strip_tags($str); // Devuelve "Esto es un encabezado" sin las etiquetas HTML

?>

La verdad es que me suele funcionar pero por lo que sé, hay alguna función más para validar datos: http://php.net/manual/es/function.filter-var.php

Me gustaría que cuando un usuario envíe algo, el servidor obtenga lo que escribe (aunque sean etiquetas HTML) pero no las ejecute.
Es decir, que si quiero imprimir en pantalla lo que un usuario escribe exactamente: <h1>Hola mundo<h1>
Yo imprima <h1>Hola mundo</h1> como texto plano, sin ejecutar las etiquetas HTML.

¿Cuál sería la manera correcta?

Saludos!
Hola no se si sera la mejor forma pero te podria servir
<?php
$a = "<h1>Hola</h1>";
echo stripcslashes(nl2br(htmlentities($a)));
?> 
Gracias por el código Francisco, a ver si alguna otra persona pone alguna otra forma también y vemos cuál es más segura de todas :)