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.
Así pues, el formulario no sería más que:
Código :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Formulario</title> </head> <body> <form action="resultado.php" method="post"> Texto: <textarea name="texto" cols="40" rows="7"></textarea> <input type="submit" name="click" value="enviar"/> </form> </body> </html>
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í:
Código :
<?php echo stripcslashes(nl2br(htmlentities($_POST('texto')))); ?>
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por canastendo el 16 de Diciembre de 2008
Gracias
Por Dano el 17 de Diciembre de 2008
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.
Código :
Por Bleend el 17 de Diciembre de 2008
@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 M@U el 17 de Diciembre de 2008
Bleend :
De hecho, según creo el BBcode de Clab se apoya mucho en ellas, por ejemplo en las tags [as], [mysql], [php], etc.
Por Dano el 17 de Diciembre de 2008
Bleend-blog :
@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.
saludos
Por M@U el 17 de Diciembre de 2008
Por flashreloco el 17 de Diciembre de 2008
Por canastendo el 17 de Diciembre de 2008
Por Hihger el 18 de Diciembre de 2008
y que ademas cuando se escriba corrido siga enmarcado en los margenes del textarea, es decir, las dimensiones del text area
Por felix el 12 de Febrero de 2009
Por walter el 05 de Agosto de 2009
Por test el 09 de Diciembre de 2009
Por elias el 09 de Diciembre de 2009
Código :
Por angel el 07 de Marzo de 2010
Por tito el 15 de Enero de 2011
Por danae el 24 de Agosto de 2011
Por Martin el 07 de Febrero de 2013
Gracias.
Por :) :( :=) el 09 de Abril de 2013
Por Daniel el 26 de Abril de 2013
Ahora podré juntar el texto plano y el HTML para enviar emails por PHP facil y presentables