Ya tengo movil nuevo última tecnologia y con Bluetooth!!! LLama y manda mensajes. Increible!

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 ;)

2 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.

Deja un comentario