Hace ya bastante que me tuve que pelear con los charsets y el dichoso UTF8, y ahora a raíz de un amigo el incidente ha vuelto a mi cabeza. Los charsets son esos tranquilos y apacibles animalitos de pelo suave y sedoso que te encanta acariciar, pero que como algún día les caiga agua encima, la has jodido… Pues eso me pasó a mí…
Plogger (el software sobre el que basé en su día el portfolio y que ya está más retocado que Fraga) iba suavecito hasta que un día en los feeds, los caracteres extraños, como la eñe, los acentos etc, salían realmente extraños.
A continuación, simples pautas con las que acabé con mi dolor de cabeza (ojo, puede que no acabe con el tuyo):
- Asegúrate de que tus archivos de texto estén en UTF8. Y asegúrate bien.
- Especifica el charset en el HTML:
- Especifica el charset en tu lenguaje servidor preferido. En PHP:
header("Content-Type: text/html; charset=utf-8"); - utf8_decode() y utf8_encode() son tus amigas.
- Si tienes contenido en base de datos, asegúrate de que está en UTF8. Normalmente no hay problema, en mi caso, cómo no, lo había. Hay que especificarle a MySQL que charset usar para “entenderse” con el cliente (más info en inglés):
SET NAMES 'utf8';
Esto sólo es necesario a la hora de establecer la conexión con la BD, no en cada query. - Y por último, en el caso específico de los feeds, la función htmlentities no está soportada con UTF8. En los mismos comentarios de ese página, proponen su sustituta xmlentities:
function xmlentities($string) {
return str_replace ( array ( '&', '"', "'", '<', '>‘ ), array ( ‘&’ , ‘"’, ‘'’ , ‘<’ , ‘>’ ), $string );
}
Y creo que ya está. Para completar, el ticket que abrí en Plogger para solucionar el tema.
Compártelo
March 21st, 2007 | PHP, Programación |