Increible!!! Hay gente con mucho tiempo libre RT @kurioso Transforma tu portátil Dell en un... http://bit.ly/cFuh7R

Sigueme en twitter ;)

Berriart


Problemas juntando Ajax, UTF8 e Internet explorer

Estoy seguro de que no soy el único que se ha encontrado con problemas usando el juego de caracteres UTF8 y haciendo una petición Ajax con internet explorer. No sé exactamente que problema debe tener IE con la cabecera utf8 pero usando Firefox u Opera todo salía correcto y en cambio el explorer me metía los mensajes mal codificados, por lo tanto, los caracteres especiales tan habituales en castellano, aparecían mal.

Después de intentar arreglarlo de varias maneras llegué a una solucion un tanto basta pero muy sencilla, modificando una función que encontré en la ayuda de PHP. La función, que os escribo a continuación, nos dice si un string está en UTF8 o no. Bueno, más bien nos dice si debemos convertirla o no, y creo que solo debería usarse como solución a un problema similar al mio.

function isUTF8 ($string) {
	$string_utf8 = utf8_encode($string); // Ã = alt + 195
	if( strpos($string_utf8,"Ã",0) !== false ) {
		return true;  // La cadena está en UTF8
	}
	else {
		return false; //No sabemos si la cadena está en UTF8 o no, pero se debería convertir a UTF8 por si acaso
	}
}

Si la función devuelve true entonces es seguro que el string está en UTF8, pero si devuelve false no quiere decir que no lo sea. Quiere decir que está en latin1 (ISO-8859-1), o que está en UTF8 pero no contiene caracteres especiales; en cualquiera de los casos se le puede hacer utf8_encode y así nos aseguraremos de que los caracteres salgan correctos.

Para cerrar el post, una petición a todos los internautas del mundo en nombre de los desarrolladores web: ¡No uséis internet explorer! Si vosotros lo usáis nosotros tenemos que desarrollar para él, y es uno de nuestros mayores suplicios. Hacednos ese favor ;)

Igual también te interesa leer estos posts:

3 Comentarios
  1. bruce

    Y que tal esto, igual tiene menos rendimiento pero sabes seguro en que esta codificado. La idea te puede servir para más cosas.

    function isUTF8 ($string) {
    return (utf8_encode(utf8_decode($string)) == $string);
    }

  2. artberri

    Buenas,

    Yo creo que viene a ser lo mismo. Si tu $string es “hola” da igual la codificación, tu función al igual que la mia siempre dará true.

    Un saludo.

  3. Enric

    Hola!

    ¡Muy buena función!
    Me ha venido de maravilla. Gracias ;)

Deja un comentario