Bueno, pues podés usar combinaciones de:
empty (tal cual estás haciendo)
trim (para eliminar caracteres invisibles (que no solo espacios, sino tabuladores y saltos de línea también)
strlen, que obtiene el largo de una cadena.
Se me ocurre algo como :
if (strlen(trim($_POST['nombre'])) == 0) { el campo está vacío }
Saludos.