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.


Publicidad

Aviso: Los siguientes comentarios pertenecen a las personas que los han enviado.
El administrador de este sitio web no es responsable de los mismos.

[comentarios] Hay 6 comentarios:

Gravatar
24/08/2004 00:00:31
Hmmm...
por Toad (IP: 82.223.4.*)
Comentario de Toad
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
Gravatar
24/08/2004 00:01:50
Hmmm...
por Toad (IP: 82.223.4.*)
Comentario de Toad
Tampoco haría falta bajar todo el contenido. Bastaría por ejemplo con descargar hasta "</head>"...
Gravatar
24/08/2004 00:11:00
Matar moscas a cañonazos
por Juanjo (IP: 192.168.0.*)
Comentario de Juanjo
Es precisamente lo que no quiero hacer.
Gravatar
24/08/2004 00:20:45
Ya...
por Toad (IP: 82.223.4.*)
Comentario de Toad
Tienes razón :D ... pero la verdad no hay muchas alternativas (sin salirse de la especificación)...
Gravatar
24/08/2004 13:10:14
que me quiten lo bailao!
por Chavalina (IP: 83.36.128.*@80.58.39.174)
Comentario de Chavalina
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!
Gravatar
24/08/2004 13:17:59
La vía fácil
por Juanjo (IP: 192.168.0.*)
Comentario de Juanjo
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.

! Esta entrada no permite nuevos comentarios.

Los comentarios se bloquean automáticamente tras 15 días desde la publicación del artículo.

Si deseas comentar algo relacionado con el texto, puedes enviarme un e-mail.