La codificación en UTF-8 siempre ha sido un problema para los desarrolladores web, y más aún en el mundo del envío de e-mails. Parecía que en Omatech teníamos superada toda esta problemática que tantos dolores de cabeza nos ha dado, pero hoy hemos descubierto que aún teníamos problemas con los subjects con caracteres acentuados. Como siempre, Google tiene la respuesta.

A parte de la codificación del propio e-mail, se ha de especificar que el subject contendrá caracteres en UTF-8:

=?UTF-8?B?T=EDtol del mensaje?=
Donde cada carácter acentuado vaya en ASCII (por ejemplo la í ha cambiado a =ED). En PHP es tan fácil como hacer:

$title=»=?UTF-8?B?».base64_encode($title).»?=\n»;

Por otro lado, aprovecho para explicar como consigo tener mis archivos de html o php con buena codificación:

  1. Crear el archivo con UTF sin BOM (Byte-Order Mark) que es el causante de que en los archivos se visualicen los caracteres «ï»¿» al principio de la página, y además en el IE6 se destroza el diseño.
  2. Poner en el encabezado <meta http-equiv=»Content-Type» content=»text/html; charset=UTF-8» /> en el <head>.
  3. Obligar a través de PHP que el encabezamiento sea UTF-8 amb: header(‘Content-Type: text/html; charset=utf-8’);
  4. Comprobar que no hay ningún carácter antes de definir el encabezado con la función header() de PHP, incluyendo espacios y saltos de línea
  5. Obligar que todas las extracciones de datos de la BD estén en UTF-8 con la query: SET NAMES ‘utf8’;