UTF-8 en RSS

oFF-sIDE

Hola, hoy me he levantado con ganas de ponerle RSS a mi pequeña web.

El caso es que una vez ya he conseguido que sea un RSS dinámico, me encuentro con problemas con los que no me he encontrado al probar a hacerlo estático (porque había hecho una prueba con poca información).

No me está reconocimiendo los carácteres especiales como la Ñ o las letras con tilde.
Esto hace que aunque funcione, me aparezca el típico interrogante además de que el feed validator no me valide el archivo como RSS correcto.

El código que uso es este:

<?
//codigo para conectar con la base de datos

// Header para escribir XML
header('Content-type: text/xml; charset="utf-8"', true);

// Escribimos el archivo RSS
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
echo '<channel>';
echo '<title>MiWeb.com</title>';
echo '<link>http://www.MiWeb.com</link>';
echo '<description>Noticias que pasan por mi mente</description>';
echo '<atom:link href="http://www.MiWeb.com/personal_rss.php" rel="self" type="application/rss+xml" />';

for($i = 0; $i < $num_resultados; $i++)
{
	$fila = mysql_fetch_array($resultado);
	$id_entrada = $fila['id'];

echo '<item>' ;
echo '<title><![CDATA['.$fila['titulo'].']]></title>';
echo '<link>http://www.miweb.com/comentarios?id='.$fila['id'].'</link>';
echo '<description><![CDATA['.$fila['texto'].']]></description>';
echo '<author><![CDATA[[email protected] (Yo)]]></author>';
echo '<guid isPermaLink="true">http://www.miweb.com/comentarios.php?id='.$id_entrada.'</guid>';
echo '</item>';
}
echo '</channel>';
echo '</rss>';
?>

Los errores que me da son los siguientes:

This feed does not validate.

*'utf8' codec can't decode bytes in position 383-385: invalid data (maybe a high-bit character?) [help]


*line 53, column 5: XML parsing error: <unknown>:53:5: mismatched tag [help]

Además me salen bastantes advertencias, todas relacionadas con el tema de los carácteres extraños.

He de reconocer que de XML no tengo ni warra, pero el código es el mismo que he probado con el estático y lo detectaba al 100% correcto y me daba la opción de guardarme el chupi-icono del RSS válido. Estoy casi seguro de que el problema viene al meter la descripción, que contiene carácteres que no me reconoce.

A ver si me podeis echar una mano, porque yo ya no sé qué más hacer.

Muchas gracias.

erdanblo

¿Qué tipo de codificación tienes en la web y en la base de datos?

No tengo mucha idea del tema, pero prueba con utf8_encode()

NeB1

yo creo que tenía que hacer utf8_decode increíblemente...

erdanblo

#3 "yo creo que tenía que hacer utf8_decode increíblemente..."

Si los datos los tiene en ISO y el RSS en Utf8, para pasarlo a UTF-8 tendrá que tirar de encode en todo caso?

oFF-sIDE

En la base de datos tengo utf-8 spanish (no recuerdo exactamente el nombre).

El viernes cuando tenga un hueco probaré con el decode, el htmlentities y el addslashes/stripslashes a ver si lo dejo bien.

Gracias por las respuestas :)

NeB1

#4 es que creo que el problema está en que tu servidor está en utf8 y el xml no lo admite o algo así. yo si no recuerdo mal era utf8_decode enserio que me rallé muchísimo con el encode de todo lo que se me ocurrió...

oFF-sIDE

Ya está arreglado:

$nuevo_texto = $fila['texto'];
$nuevo_texto = trim($nuevo_texto);
$nuevo_texto = utf8_encode($nuevo_texto);

Con eso es suficiente, como decía #2 :)

suaveSHOW

Tambien podrías poner codificación utf8, me equivoco?

Usuarios habituales

  • suaveSHOW
  • oFF-sIDE
  • NeB1
  • erdanblo