Los problemas de charset surgen de dos cuestiones:
- Estoy abriendo una fuente utf-8 y mi salida se ve en iso-8859-1
- o bien el opuesto: iso-8859-1 la fuente, salida utf-8
Vamos a “simular” que abrimos un archivo XML y tenemos problemas con el charset.
Primer caso
Diagnóstico: Por lo general el primer caso se da cuando veo en vez de eñes y acentos dos caracteres. Suelen ser un à y algo más. En el ejemplo el archivo XML estaría codificado en utf-8 (caso más común) y nuestra página se ve en iso-8859-1
Solución: La fuente está viniendo en utf8 y necesito pasarlo a Latin-1. Esto se hace con la función utf8_decode().
$origen = "http://algunblog/feed/"; //CURL mediante o file_get_contents //En este caso hacemos la conversion de utf-8 //a iso-8859-1 $contenido = utf8_decode(file_get_contents($origen)); $xml = simplexml_load_string($contenido); //"masajeamos" el contenido del XML
Segundo caso
Diagnóstico: En vez de caracteres especiales vemos unos signos de interrogación o cuadraditos con números. Esto significa que no puede traducir el caracter a alguno Unicode porque está “mal formado”.
Solución: Hay que convertir nuestra cadena a utf-8 mediante la función utf8_encode().
$origen = "http://algunblog/feed/"; //CURL mediante o file_get_contents //En este caso hacemos la conversion de iso-8859-1 //a utf-8 $contenido = utf8_encode(file_get_contents($origen)); $xml = simplexml_load_string($contenido); //"masajeamos" el contenido del XML
Estos son los dos casos básicos. Desde ya que esto tiene una explicación un poco más teórica, pero que vamos a abordar en otro post o tal vez le dediquemos una página. Por ahora con esto ya podemos solucionar muchos problemas.
Cuando trabajemos con bases de datos también tenemos que tener en cuenta estas consideraciones. Tenemos ventajas además, por lo general nos permite seleccionar el encoding de la conexión. El parámetro suele llamarse “charset”.
Mi intención es fundar la SALPICADA (Sociedad Argentina por la Lucha contra Problemas Indescifrables de Charset Accediendo a Datos y Archivos) para investigar el tema, capacitar y ofrecer ayuda. Evitemos que nuestras páginas terminen SALPICADAs por feos caracteres que hacen los textos menos legibles.
Cualquier duda, acá estoy.