1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Evitar los problemas de caracteres no habituales y de codificación de las páginas
Pueden aparecer problemas a nivel de la codificación del texto cuando diferentes solicitudes se pasan datos.
Por ejemplo, si la codificación de la página HTML está en UTF8, mientras que la base de datos está en latin-1, MySQL no interpretará los acentos correctamente. Si las páginas contienen caracteres especiales (textos árabes, chinos, acentos) pueden mostrarse correctamente en su sitio web, pero no en phpMyAdmin, o a la inversa...
Para que todo funcione hay que especificar la codificación de caracteres utilizada en todas partes (UTF8 para evitar problemas)...
Utilice un editor de texto capaz de guardar sus archivos en UTF8. Si usted importa archivos de texto con el código SQL en su interior, tendrá que editarlos con un software que permita guardarlos en codificación UTF8.
Fuerce las cabeceras del sitio en UTF8 con esta función PHP:
header('Content-Type: text/html; charset=utf-8');
En el código HTML meta, añada lo siguiente:
Declare la codificación de sus bases de datos y tablas en UTF8 en PHPMyAdmin (por ejemplo, utf8_general_ci)
Añada las líneas siguientes en su archivo .htaccess de la carpeta /web:
php_value default_charset utf-8
php_value mbstring.internal_encoding UTF-8
Añada la función PHP mysql_set_charset en la conexión creada por mysql_connect con el objetivo de determinar la codificación de esta conexión (si no la especifica, el valor por defecto de este parámetro puede variar de un servidor a otro):
$connection = mysql_connect($server, $username, $password);
mysql_set_charset('utf8', $connection);
También puede modificar este parámetro por defecto en todo su alojamiento siguiendo esta documentación.
Una vez que la conexión MySQL quede establecida desde un script PHP, también podrá especificar el tipo de codificación de caracteres UTF8 con estos comandos:
mysql_query("SET NAMES 'utf8';");
mysql_query("SET CHARACTER SET 'utf8';");
Si recupera un dump MySQL (copia de seguridad) y lo importa a us base de datos, puede ocurrir que todos los acentos sean sustituidos por caracteres extraños ("?" p. ej..).
Leas copias de seguridad de las bases MySQL se realizan en formato UTF8. En ese caso, las copias de seguridad se codifican en dos octetos. La importación de estas copias de seguridad no plantea problemas anuestros servidores, pero usted deberá adaptar su configuración de casa para la importación en local de las bases en UTF8 a su equipo.
Pruebe, por ejemplo, realizar una conversión utf8 -> latin1 del archivo SQL antes de la importación.
Si no, al importar la base, bastará con que especifique que su archivo de entrada está en formato iso-latin1 (sección impoortar, "Juegos de de carácter del archivo") y la importación se realizará correctamente.
Cuando los caracteres especiales se convierten en '?', es probable que el archivo que importe esté enUTF8 y el software esté configurado para importar UTF-8. Linux puede realizar la conversión a UTF-8 con el comando 'iconv'.