he recibido esta base de datos completa de los nombres de las personas y los datos en francés, lo que significa que, utilizando caracteres como é, è, o, u, etc. Alrededor de 3.000 entradas.cómo detectar y corregir la codificación de caracteres en una base de datos mysql a través de php?
Aparentemente, los datos en el interior ha sido codificado a veces usando utf8_encode(), y otras no. Esto resulta en una salida desordenada: en algunos lugares los personajes se muestran bien, en otros no.
Al principio traté de rastrear cada lugar en la interfaz de usuario donde surgen esos problemas y uso utf8_decode() cuando sea necesario, pero en realidad no es una solución práctica.
Hice algunas pruebas y no hay ninguna razón para usar utf8_encode en primer lugar, así que preferiría eliminar todo eso y simplemente trabajar en UTF8 en todas partes, en los niveles de navegador, middleware y base de datos. Así que necesito limpiar la base de datos, convirtiendo todos los datos mal codificados por su versión limpia.
Pregunta: ¿sería posible crear una función en php que compruebe si una cadena utf8 está codificada correctamente (sin utf8_encode) o no (con utf8_encode) y, si fuera así, conviértala nuevamente a su estado original ?
En otros términos: me gustaría saber cómo puedo detectar contenido utf8 que ha sido utf8_encode() a contenido utf8 que no ha sido utf8_encode() d.
** ACTUALIZACIÓN: Ejemplo **
Aquí es un buen ejemplo: se toma una cadena completa de caracteres especiales y tomar una copia de esta cadena y utf8_encode() él. La función que estoy soñando toma ambas cuerdas, deja intacta a la primera y la segunda cuerda ahora es igual que la cadena uno.
yo probamos este:
$loc_fr = setlocale(LC_ALL, 'fr_BE.UTF8','[email protected]', 'fr_BE', 'fr', 'fra', 'fr_FR');
$str1= "éèöûêïà ";
$str2 = utf8_encode($str1);
function convert_charset($str) {
$charset= mb_detect_encoding($str);
if($charset=="UTF-8") {
return utf8_decode($str);
}
else {
return $str;
}
}
function correctString($str) {
echo "\nbefore: $str";
$str= convert_charset($str);
echo "\nafter: $str";
}
correctString($str1);
echo('<hr/>'."\n");
correctString($str2);
Y eso me da:
before: éèöûêïà after: �������
before: éèöûêïà after: éèöûêïà
Gracias,
Alex
Creo que entendiste exactamente el problema, y realmente aprecio tu amplia contribución. Probaré tu script y te responderé. Pregunta: ¿dónde puedo encontrar el código de los otros caracteres acentuados para agregar en la lista blanca? ¿Cómo se llama? ¿Es la columna del código hexadecimal en esta página: http://webdesign.about.com/od/localization/l/blhtmlcodes-fr.htm? – pixeline
Esa lista debe cubrir la mayoría de lo que necesita, y si necesita otros caracteres, se basa en el punto de código Unicode, que puede buscar en alguna parte como http://www.fileformat.info/info/unicode/index.htm . El símbolo del euro podría causar algunos problemas: su punto de código Unicode es U + 20AC, pero ha surgido una convención en HTML de usar una referencia de caracteres de 80, que es lo que usa la lista webdesign.about.com. –