Web 2.0 Tips

Icon

Consejos y trucos para el desarrollo y diseño de webs

Mostrar contenido correctamente en PHP

Bueno se viene un consejo simple y mas que nada para los que se esten abriendo camino en PHP. Como sabrán en la programación web trabajamos tanto en la lógica como en la vista de la información que procesamos, se debe tener en cuenta que cada texto que se muestre no sera publicado en texto, sino que sera publicado en HTML, asi que si hacemos un:

echo "Hola <br />Mundo ";

Obtendremos un:

Hola
Mundo

Claro esta que en este caso lo controlamos nosotros, pero el problema viene cuando manejamos texto extraido de la base de datos, un XML externo, etc.

Por ejemplo si tenemos comentarios hechos por los usuarios, el mostrarlos tal cual lo escriben no solo es un error en resultado HTML, sino que puede provocar errores de seguridad (vease XSS), por ejemplo si un usuario escribe en vez de un comentario un codigo javascript y nosotros se lo mostramos al explorador sin mas, el usuario podria perjudicar al usuario que lea ese codigo.

Para eso PHP nos presta una serie de funciones, y aunque una es la mas usada (htmlentities) no es la única que tendremos que usar. Asi que explicare para que sirve cada una:

htmlentities():

Como dije esta es la mas usada, ya que transformará cualquier caracter que pueda ser interpretado como HTML a un codigo para que pueda ser mostrado tal cual, de esta forma:

$text = "Hola <br />Mundo";

echp $texto;
// Hola <br /> Mundo

echo htmlentities($texto);
// Hola &lt;br /&gt; Mundo

Esta función es la que deberemos usar para mostrar contenidos desde una base de datos por ejemplo, convertira todo a &codigo; que sera interpretado por el navegador como lo que es y no una entidad o tag, tambien es necesaria para los acentos y demas caracteres “raros”.

html_entity_decode

Esta función es la antitesis de la anterior,  realmente es muy poco utilizada, en casos demaciados precisos, es para transformar las entidades HTML, como &gt; por lo que es “>”.

htmlspecialchars:

Esta función tambien encodea los caracteres interpretables, pero no los de contenido sino los de valor dentro de algun atributo de HTML.

Hay mucha gente que se envisia con el htmlentities pensando que es el gran salvador, pero supongamos que tengamos un formulario de busqueda, y tengamos que poner lo que acaba de buscar el usuario en un input:


<input type="text" name="search" value="<?= htmlentities($_GET['search'] ?>" />

Eso esta mal, ya que si llega un “>” lo transformara en efectivamente en un <, pero dentro de un atributo, en este caso “value”, no se interpretara, asi que se mostrara tal cual la entidad, peor aún si se envia una comilla o comilla simple, esta romperá el codigo de igual manera, ya que no sera necesaria su transformacion, para eso tenemos la función htmlspecialchars, que transformará caracteres raros en otro tipo de entidad. en este caso por ejemplo:


$texto = 'Hola <br/> "mundo" ';
// Hola <br/> "mundo"

echo htmlentities($texto);
// Hola &lt;br /&gt; "mundo"

echo htmlspecialchars($texto)
// Hola &lt;br /&gt; &quot;mundo&quot;

Asi podra ser insertada dentro de un value=”algo” o value=’algo’, sin miedo a que se escape una comilla de ninegún tipo.

strip_tags:

En este caso, esta función solo borrará los tags HTML, convirtiendolo en texto plano, esto se usa si por ejemplo almacenamos directamente HTML de confianza (sea un editor avanzado o un CMS) y debemos transformar en solo texto para por ejemplo mostrar una descripcion corta:

$texto = "<strong>Hola</strong> <br /> Mundo";
// <strong>Hola</strong> <br /> Mundo

echo strip_tags($texto);
// Hola Mundo

urlencode:

Por ultimo voy a hablar de esta función, que se encargará de encodear una URL sea legible como URL.

Este tipo de encode se realiza reemplazando caracteres extraños por un entidad que comienza en % y avisa el numero en ascii del caracter, en el caso del espacio por ejemplo, se usa %20 que a mas de uno le debe resultar familiar.

De esta forma nos garantisamos que la URL se comporte como tal:

 $urlUsuario = $user['url'];

 echo "<a href=\"" . urlencode($urlUsuario) . "\" title=\"\" />";

Si nuesro objetivo es el contrario, por ejemplo analizar una URL y esta la función urldecode().

Bueno esto es solo introductivo, espero que les sirva.


No hay tips relacionados.

Tip de PHP, Programación

Tags: , , , ,

One Response

  1. [...] la variable status con el valor “Productos de Jhonson” y la variable Jhonson vasia, como ya explique en otro post, en php se usaría la funcion urlencode. [...]

Leave a Reply

Exos

Oscar J. Gentilezza Arenas (Exos) Programador y curioso en lo relacionado en la informatica, actualmente trabaja de programador web usando PHP y manteniendo servidores en GNU/Linux y FreeBSD

Web: http://blog.exodica.com.ar

Tips: 40

Recomendamos

Haste autor!

En web2.0-tips, cualquiera puede publicar un consejo, truco o articulo relacionado con el desarrollo y diseño web. Tu puedes registrarte y postear, aparte te quedas con el 80% de impresiones de adsense en tus publicaciones.

Lee mas aca!

Categoria

Haste fan

Web Analytics