23 de Agosto, 2004

Distintos juegos de caracteres y los trackback

Nota importante:

Después de escribir todo esto, netcat me ha revelado que el navegador no manda el charset :(. Al final va a ser que no se puede hacer el trackback desde el navegador y hay que construir el POST, lo que complica (un poco) las cosas. Así que mi gozo en un pozo :'( y avisado queda el lector. A ver si esta anotación le sirve a alguien de inspiración y soluciona el tema donde yo fallo estrepitosamente.

Voy a explicar como se puede solventar el problema que presenta la especificación de MT de los trackbacks.

La especificación como tal no contempla que el juego de caracteres que emplea la bitácora de origen no tiene porqué ser el mismo que el de la bitácora a la que se hace trackback. Parece que es algo habitual, que se suponga us-ascii para todos y se pase por alto que hay diferentes codificaciones posibles. Estos anglosajones no aprenden :P. Y en realidad no es mala idea, empleando entidades HTML y ASCII podríamos superar todo este embrollo... pero la especificación no lo indica.

Otra forma de haber evitado el problema es que se hubiera empleado una forma de comunicación más clara, como XML-RPC, o que el mensaje se enviara codificado con XML que, aunque por defecto usa urf-8, nos permite indicar el juego de caracteres que empleamos.

Pero no le demos más vueltas. El problema está aquí y se puede resolver. Como expliqué no hace mucho, ISO 8859-1 y UNICODE son dos codificaciones razonables que podríamos elegir para emplear en nuestra bitácora, y lamentablemente no todo el mundo considera que para el castellano es suficiente con el estándar de Europa (ISO 8859-1). Bueno, los problemas con solución no son problema, ¿no?

La gente de Six Apart no andaron muy finos con la especificación, de acuerdo. Pero el XHTML nos permite indicar el juego de caracteres en el que se envía un formulario, y esa va a ser nuestra solución.

Para hacer un trackback genero un formulario y dejo que mi navegador envíe los datos. Por ejemplo:

<form name="form"
 enctype="application/x-www-form-urlencoded; charset=iso-8859-1"
 action="http://SITE.DOM/TB?X" method="post">

<input type="text" name="title" size="60" value="TITULO DEL TB" /><br />

<input type="text" name="url" size="60"
 value="http://MI.BLOG.DOM/URL-HISTORIA" /><br />

<input type="text" name="blog_name" size="60"
 value="MI-NOMBRE" /><br />

<input type="text" name="excerpt" size="60" 
value="La cita. MT recorta en 256 caracteres, así que ojo..." /><br />

<input type="submit" value="Enviar" />

</form>

La clave está en rojo.

Por defecto los formularios con POST se envían codificados application/x-www-form-urlencoded. Solo nos falta indicar el juego de caracteres junto ese valor predeterminado y el objetivo de nuestro trackback sabrá si tiene que realizar alguna conversión o no.

Lamentablemente no hay una forma sencilla de obtener ese charset desde PHP :(. O al menos yo no he dado con la forma.

A partir de aquí haremos una conversión, de ser necesario, desde el juego de caracteres que nos indican al que nosotros empleamos.

Lamento no poder mostrar código sobre como obtener el valor de charset de un formulario, seguiré investigando. Por ahora enviaré el iso-8859-1 en mis trackbacks, que parece más correcto que no hacerlo.

Anotación por Juan J. Martínez.

Hay 6 comentarios

Gravatar

Pero en mi caso los trackbacks los envía el PHP, yo sólo pico un botón y automáticamente me genera el resumen y lo envía utilizando sockets.

Hmmm... también se podría hacer:

1) Recibimos un TB con la URI del que nos lo ha hecho.
2) Utilizando sockets bajamos el contenido de esa URI.
3) Utilizando expresiones regulares buscamos la etiqueta "<meta http-equiv="Content-Type" content="text/html; charset=LOQUESEA">". Bueno, bastaría con buscar charset= .

Claro que gastaría más ancho de banda pero... :S :S

por Toad, en 2004-08-24 00:00:31

Gravatar

Tampoco haría falta bajar todo el contenido. Bastaría por ejemplo con descargar hasta "</head>"...

por Toad, en 2004-08-24 00:01:50

Gravatar

Es precisamente lo que no quiero hacer.

por Juanjo, en 2004-08-24 00:11:00

Gravatar

Tienes razón :D ... pero la verdad no hay muchas alternativas (sin salirse de la especificación)...

por Toad, en 2004-08-24 00:20:45

Gravatar

Pues yo he decidido modificar mi script para que quite todos los acentos y caracteres especiales.

Ale, cortando por lo sano. La cosa se va a entender igual, y total, tampoco nos van a dar un premio, así que...

Nos complicamos demasiado la vida!

por Chavalina, en 2004-08-24 13:10:14

Gravatar

Codificar los trackbacks salientes a us-ascii... usando htmlentities en PHP. Así somos buenos con el resto.

Y el que no haga lo mismo, es decir, que nos mande un charset que no nos apaña (yo aceptaría en este blog us-ascii e iso-8859-1), pues se borra y listo -en caso de que nos moleste mucho ver caracteres raros en nuestro blog :D-.

Cada vez estoy más convencido.

por Juanjo, en 2004-08-24 13:17:59

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.