11.2.06

Respetar los "retorno de carro" de un texto de nuestra base de datos

Caso: levantamos un campo de texto de nuestra base de datos que tiene un formato con retornos de carro, es decir, tiene escritos tres párrafos separados con un [Enter].


Si nosotros tomamos ese campo, tal cual, y lo incluimos en nuestra plantilla html, nuestro texto quedará todo junto sin saltos.

Si visualizamos el código que estamos viendo desde nuestro navegador, el texto aparecerá con los "saltos de carro" correctos.


¿Por qué sucede esto?

Bueno, en HTML solo se toma en cuenta *un solo espacio*, los restantes no son tenidos en cuenta, ni tampoco los comandos que representan "retorno de carro" (\n) o los tabuladores (\t), etcétera.

¿Cómo podemos solucionarlo con Smarty?


Una expresión regular que toma el contenido "en bruto" y busca los comandos "\n" y los sustituye con un "salto de línea" en formato HTML.


{$elemento.texto_noticia|regex_replace:"/[\n]/":"<br>"}

Resultado: si tiene un solo "retorno" (\n) se coloca uno "break", si tiene dos, agrega dos "break", dando el efecto de separación con linea en blanco.


De la misma forma, podríamos hacer con los "\t", y agregándoles, por ejemplo, una serie de espacios en formato html:     

Simple, sencillo, directo ;-)

PD: estoy casi seguro que esta "estrategia" está escrita en algún lado, tal vez en el manual del Smarty, o en un artículo (porque vino demasiado rápido a mi cerebro ;-).

2 comentarios:

Gastón Furini dijo...

Creo que mas sencillo sería usar el modificador nl2br

Por ejemplo:

{$elemento.texto_noticia|nl2br}

Nota: A partir de PHP 4.0.5, nl2br() respeta los estándares de XHTML. Todas las versiones anteriores de PHP a la 4.0.5 devolverán cadena con '<_br>' antes de cada nueva línea, en vez de '<_br />'.

Al utilizar regex_replace se consigue mayor flexibilidad y pueden seguir creando sitios con php < 4.0.5 y HTML tradicional.

Saludos.
Lindo blog.

PD: quitar las _

enrique_place dijo...

Estimado Gastón:

Creo que por la fecha en que escribí este artículo, no tenía idea de la posibilidad de usar nl2br. Hoy día lo tengo muy claro, así que este artículo debería comentar ambas opciones.

Gracias por el aporte.

PD: este blog está en desuso, nos migramos a un único blog: PHPSenior