Como bien ha comentado antes htmlentities no convierte los espacios, ya lo había probado antes y no funcionaba.
 
Ya he conseguido solucionarlo, lo que he usado es str_replace 
Una pregunta, a ver si me podéis decir cómo slucionarlo: 
La línea esta para los espacios que comento es: 
 Código PHP:
   
<p><?php echo nl2br(str_replace(" "," ",$cadena));?>    
  Si la ponía así directamente perdía el formato, respeta los espacios y los saltos, pero aparece todo en una línea, es decir no respeta la etiqueta <p>. Lo que he hecho es dentro del caracter a buscar le he puesto que busque dos espacios y los sustituya por dos veces   y así sí lo hace.  
¿Hay otra forma de hacerlo? ¿Por qué hace eso? 
Saludos y gracias