Etiquetas de HTML en tu feed de RSS

He leído dos entradas en blogmundi que me han hecho revisar hoy mis feeds de RSS me he encontrado conque el de enlaces emergentes (enlace al feed RSS) no validaba correctamente.

Resulta que no es correcto incluir etiquetas (tags) de HTML dentro de un feed de RSS. Algunos lectores de noticias lo aceptan sin chistas (como Google Reader) pero realmente no deberían validar y podrían dar errores (el mío mostraba imágenes duplicadas por esto).

Por supuesto, una vez que lo lees y recuerdas que RSS es XML entiendes perfectamente que no se pueda poner cualquier etiqueta sino sólo las que son parte de la especificación.

¿Qué hacer, entonces?

Para poder incluir HTML en las tags de contenido (<description> y <container>) de tu feed tienes dos soluciones posibles. La primera es la poco elegante:

-Donde el código original es:
[code]hola[/code]
-Después de modificar queda como:
[code]<b>hola</b>[/code]

Utilizando htmlspecialchars() en PHP o Server.HTMLencode() en ASP.

La segunda solución es más recomendada ya que no toca el HTML original y cumple con los estándares. La idea es “envolver” el contenido de estas dos etiquetas en un contenedor CDATA:

-Donde el código original es:
[code]hola[/code]
-Después de modificar queda como:
[code]hola]]> [/code]

(notar el espacio final antes de cerrar el container, que asegura que haya contenido “real”).

Después de hacer el cambio el feed valida perfectamente.

NOTA: Para aquellos que utilicen el plugin para WordPress llamado wp-recent-links (originalmente de rebelpixel) he puesto una solución a este problema en los foros de soporte.

1 comment

  1. Buenas compañero.

    Muchas gracias por el tutorial, me estaba volviendo loco para sacar html en un rss de ASP. La función Server.HTMLencode() funciona perfectamente.

    Ahora me toca buscar la caja , porque no me sirve. (Con description sí, pero solo me saca el contenido de uno de los description, no se pueden repetir).

Leave a Reply

Your email address will not be published. Required fields are marked *