Codificar y decodificar entidades HTML en Python

jueves, diciembre 24, 2009

Aunque es una tarea vulgar y silvestre, en Python no existe algo "obvio" para codificar y decodificar entidades HTML. Me gustaría encontrar cosas como htmllib.decode() o htmllib.encode(), pero no existen. He visto en la web muchos (entiéndase MUCHOS) códigos y hasta expresiones regulares para completar esta tarea, pero son soluciones rebuscadas y que requieren invertir mucho tiempo.

Lo mío es a la Python-way: sencillo, elegante y limpio, y saxutils hace el trabajo a la perfección.

Basta con importar la librería y usar las funciones escape (para codificar) y unescape (para decodificar):

import xml.sax.saxutils as saxutils
print saxutils.escape("Codificando entidades HTML: & > <")

print saxutils.unescape("Decodificando entidades HTML: &gt; &amp; &lt;")


Esto imprimirá en pantalla algo como:
Codificando entidades HTML: &amp; &gt; &lt;
Decodificando entidades HTML: > & <


Simple, pero a veces no lo vemos a la primera. Espero que sea de utilidad este consejo

2 comentarios:

El bicicletero dijo...

Perdon por mi ignorancia pero no entiendo la diferencia entre lo que publicas y un print comun

Lo que esta entre comillas en el codigo es lo mismo que se imprime en pantalla.

Satanas dijo...

Hola bicicletero. La diferencia es mínima, pero muy importante.

El lenguaje HTML tiene caracteres reservados (por ej: &, <, >, etc) que se usan en el marcado del documento (ej: <b>Hola</b>). En caso de que queramos imprimir uno de esos códigos en pantalla sin que sea interpretado como caracter para el marcado entonces debemos hacer uso de las entidades HTML.

Las entidades no son más que una forma 'codificada' de representar dichos caracteres. El < se representa con el código &lt; y así sucesivamente. Acá te dejo una lista de todas las entidades HTML conocidas.

Si miras el código de nuevo y con detenimiento, te darás cuenta que en la primera línea lo que está entre comillas son los caracteres reales y en pantalla se imprimen sus correspondientes entidades. En la segunda línea tenemos las entidades HTML y se imprimien en pantalla los caracteres reales ;)

Espero haber aclarado tu duda.

Saludos