1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Resolver un problema de codificación de páginas
Esta guía le concierne si encuentra problemas de codificación de páginas y caracteres anormales que aparecen en sus páginas.
Codificación universal
Si usted tiene problemas de codificación de páginas, es importante comprobar que la codificación de su página está bien definida en UTF-8 UTF-8 es una codificación universal que admite la mayoría de los caracteres utilizados en el mundo. Puede ocurrir que algunos archivos contengan caracteres incompatibles con la codificación UTF-8. En este caso, debe convertirlos a UTF-8 con la ayuda de un editor de texto adecuado.
Si la codificación de la página HTML es p.ex en UTF-8 mientras que la base de datos está en latín-1 los acentos no serán interpretados correctamente por MySQL. Si las páginas contienen caracteres especiales (textos árabes, chinos, acentos) pueden aparecer correctamente en su sitio web pero no en phpMyAdmin, o viceversa...
Usar un editor de texto capaz de guardar sus archivos en UTF-8. Si importa archivos de texto con código SQL dentro, debe editarlos con un software que guarde en UTF-8.
UTF-8 en PHP
Para forzar los headers del sitio en UTF-8 utilizando PHP, puede utilizar la función header()
con el parámetro Content-Type
Este es un ejemplo de código que permite forzar la codificación de caracteres en UTF-8:
<?php
header('Content-Type: text/html; charset=utf-8');
?>
UTF-8 via .htaccess
Para forzar la codificación de caracteres en UTF-8 a través del archivo .htaccess de su sitio, para el contenido HTML añadir:
AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
y para el contenido de PHP añadir:
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8
UTF-8 en HTML
Para especificar la codificación de caracteres en UTF-8 en el código HTML, puede utilizar la etiqueta meta charset
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Titre de la page</title>
</head>
<body>
<!-- Contenu de la page -->
</body>
</html>
Asegúrese también de que todos los archivos utilizados en su sitio web, como los archivos de estilo CSS y los scripts JavaScript, también estén codificados en UTF-8. Esto garantiza que todos los caracteres en su sitio web se mostrarán correctamente.
UTF8 en base de datos
Para (re) declarar la codificación de bases de datos y tablas en UTF-8 en phpMyAdmin, puede seguir los siguientes pasos:
- Inicie sesión en su panel de control phpMyAdmin.
- Haga clic en la pestaña "Operaciones" en la parte superior.
- En la sección Opciones de la tabla, busque la línea "Colación" y haga clic en el botón desplegable.
- Seleccionar una opción de aperitivo que utilice la codificación UTF-8, por ejemplo
utf8_general_ci
. - Haga clic en el botón "Ejecutar" en la parte inferior de la página para guardar los cambios.
Añade la función PHP mysql_set_charset
a la conexión creada por mysql_connect para determinar la codificación de esta conexión (si no la especifica, el valor predeterminado 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 cambiar este parámetro predeterminado en todo su alojamiento siguiendo la documentación.
Una vez establecida la conexión MySQL desde un script PHP, también puede especificar el tipo de charset UTF8 con estos comandos:
mysql_query("SET NAMES 'utf8';");
mysql_query("SET CHARACTER SET 'utf8';");
Accents / Caracteres especiales
Cuando recupera una copia de seguridad de su base de datos MySQL (llamada "dump") y la importa en su propia base de datos, puede que los acentos (como e, a, oh) aparecen en forma de símbolos extraños, como puntos de interrogación (p.ej. "?" en lugar de un acento).
Esto sucede porque las copias de seguridad MySQL se crean generalmente utilizando un formato especial llamado UTF-8
En este formato, las letras con acentos utilizan más espacio (se codifican en dos bytes, un poco como dos "unidades" de datos por carácter). En los servidores, funciona bien, pero si usted trabaja en su computadora personal, puede que tenga que ajustar algunas configuraciones para que la importación se haga correctamente utilizando UTF-8
El problema de los caracteres extraños ocurre generalmente cuando hay una desvinculación de codificación entre el archivo de copia de seguridad y la importación. Esto puede ocurrir si el archivo está codificado en un formato (p.ex) UTF-8
) pero que MySQL espera otra codificación (p.ej. latin1
).
Aquí están algunas soluciones:
- Convertir archivo : Puede convertir el archivo de copia de seguridad de
UTF-8
a otro formato, llamadolatin1
, antes de importarlo a su base de datos. Esto puede evitar que los acentos se interpreten mal, pero tiene limitaciones. Si el archivo contiene caracteres que no pueden ser representados enlatin1
(como algunos caracteres especiales o no europeos), puede perder estos caracteres durante la conversión. Por lo tanto, es una solución que debe utilizarse con precaución y depende del tipo de datos presentes en su archivo SQL. - Especificar el formato correcto al importar : Si usted no ha convertido el archivo, puede indicar, al importar, que el archivo está en formato
iso-latin1
(Al importar un archivo SQL, puede indicar explícitamente que el archivo está en ISO-8859-1, también llamado latín1). Esto permite alinear la codificación del archivo con la prevista por MySQL, lo que por lo general resuelve el problema de los caracteres mal mostrados.
Si usted ve puntos de interrogación en lugar de acentos, esto probablemente significa que el archivo de copia de seguridad está en un formato distinto de UTF-8
, pero que su software intenta importar como si estuviera en UTF-8
Para evitar esto, en Linux, puede utilizar un comando llamado iconv
para convertir el archivo a UTF-8 antes de la importación. Esto asegura que la codificación sea coherente con las expectativas de MySQL.