Comunidad de diseño web y desarrollo en internet online

Convertir un texto en PHP a HTML tal como se envió por HTTP

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: &nbsp;&nbsp;
<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.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate