Imaginen esta situación: tenemos que hacer que PHP procese un texto plano normal y corriente, y hacer que tras pasar por el script, el texto aparezca en la pantalla del navegador justo como lo enviamos (o con alguna modificación, pero manteniéndose como texto plano). Parece algo obvio e inútil, pero tras pensarlo un poco no me parece ninguna de las dos.
En la situación más sencilla, tendríamos un formulario con un área de texto y un botón para enviarlo a una página en la que se muestra el texto que enviamos, tal cual. Podríamos complicarlo haciendo que busque ciertas cadenas o realice alguna modificación al texto mediante expresiones regulares , o usarlo, por ejemplo, para un sistema de comentarios cutre.
Y ahora veamos qué tendríamos en resultado.php. Lo primero que pensé es que bastaría con:
Código :
<?php
echo $_POST('texto');
?>
Sin embargo, al comprobarlo escribiendo cualquier cosa, nos damos cuenta inmediatamente de que no respeta los saltos de línea, y muestra simplemente un texto continuo en un párrafo, aunque si miramos el código en el navegador, comprobamos que aparece \n en cada salto de línea. Para solucionar eso, hay que usar la función de PHP nl2br, que transforma los saltos de línea de la forma \n a la forma que tienen en html, </br>.
Si seguimos haciendo pruebas y/o pensamos un poco, veremos que si insertamos un código html válido, el navegador lo parseará, en vez de mostrarlo tal cual. Así, si ponemos un texto entre las etiquetas de negrita, <b>texto</b> obtendremos texto, en lugar de la cadena literal que tenemos. Para impedir que el navegador interprete los tags html, podemos convertirlos en sus entidades equivalentes, usando la función htmlentities. Noten que hay que aplicarla antes que la función nl2br, para que no escape también las etiquetas de salto de línea </br>.
Si probamos esto en un servidor local normal, parece que ya está, sin embargo, es posible encontrarse con servidores que escapan por defecto todos los caracteres "peligrosos" (como las comillas) que les envían por POST. Así que, cuando creíamos que el texto ya se mostraba correctamente, al subirlo a un servidor, comprobamos que las comillas se muestran escapadas. Si enviáramos Esto es el "texto", veríamos Esto es el \"texto\". Para contrarrestarlo, hay que aplicar la función stripcslashes. De manera, que al final quedaría así:
Otra opción para mostrar el texto, sin hacerle nada de nada en PHP, es poner el texto dentro de las etiquetas pre, así respeta saltos de línea y caracteres html introducidos.
Muy bueno Zah, me lo había encontrado, hice lo que tú, pero sin lo de los Slashes, eso no lo sabía.
@Dano: La etiqueta es esa por alguna razón en concreto o solamente es cuestión de que esté dentro de unas etiquetas sin importar cuales sean? Nunca vi esa etiqueta... Por:Bleend
Bleend :
@Dano: La etiqueta es esa por alguna razón en concreto o solamente es cuestión de que esté dentro de unas etiquetas sin importar cuales sean? Nunca vi esa etiqueta...
Según entiendo la etiqueta <pre> evita el formateo del texto ante el navegador... Por lo que de poner cualquier otra si habría un cambio notorio.
De hecho, según creo el BBcode de Clab se apoya mucho en ellas, por ejemplo en las tags [as], [mysql], [php], etc. Por:M@U
Bleend-blog :
Muy bueno Zah, me lo había encontrado, hice lo que tú, pero sin lo de los Slashes, eso no lo sabía.
@Dano: La etiqueta es esa por alguna razón en concreto o solamente es cuestión de que esté dentro de unas etiquetas sin importar cuales sean? Nunca vi esa etiqueta...
Tiene que ser afuerzas pre. Se llama pre, porque define texto preformateado. Lo que hace es tratar el contenido como si de texto plano se tratara, respetando todos los espacios en blanco y saltos de línea normales. Así como las tabulaciones. Resulta muy interesante en muchos de los casos. Al ser una etiqueta html, se le pueden aplicar estilos sin problemas, lo comento por si se asustan y ven como texto default un courier, con un estilo CSS pueden cambiarle el font-family.