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
Tags:

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) {
#1 - Publicado hace 2 años y 8 meses por brucereturn (utf8_encode(utf8_decode($string)) == $string);
}
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.
#2 - Publicado hace 2 años y 7 meses por artberriHola!
¡Muy buena función!
#3 - Publicado hace 1 año y 3 meses por EnricMe ha venido de maravilla. Gracias