1000 FAQ, 500 tutoriales y vídeos explicativos. ¡Aquí sólo hay soluciones!
Resolver un problema de codificación de las páginas
Esta guía le concierne si enfrenta problemas de codificación de páginas y caracteres anormales que aparecen en sus páginas.
Codificación universal
Si tiene problemas de codificación de páginas, es importante verificar que la codificación de su página esté correctamente definida en UTF-8. UTF-8 es una codificación universal que soporta 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 ese caso, debe convertirlos a UTF-8 utilizando un editor de texto adecuado.
Si el codificado de la página HTML es, por ejemplo, en UTF-8 mientras que la base de datos está en latin-1, los acentos no se interpretarán correctamente por MySQL. Si las páginas contienen caracteres especiales (textos árabes, chinos, acentos), pueden mostrarse correctamente en su sitio web pero no en phpMyAdmin, o viceversa...
Utilice un editor de texto que pueda guardar sus archivos en UTF-8. Si importa archivos de texto con código SQL, debe editarlos con un software que guarde en UTF-8.
UTF-8 en PHP
Para forzar los encabezados del sitio en UTF-8 utilizando PHP, puede usar la función header()
con el parámetro Content-Type
. Aquí tienes 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 a través de .htaccess
Para forzar la codificación de caracteres en UTF-8 a través del archivo .htaccess de su sitio, para contenido HTML agregue:
AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
y para contenido PHP agregar:
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 usar 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.
UTF-8 en base de datos
Para (re)declarar la codificación de las bases de datos y las tablas en UTF-8 en phpMyAdmin, puede seguir los siguientes pasos:
- Conéctate a tu 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 "Collation" y haga clic en el botón desplegable.
- Seleccione una opción de collation 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ñada 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 modificar este parámetro predeterminado en todo su alojamiento siguiendo esta 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';");
Acentos / Caracteres especiales
Cuando recuperas una copia de seguridad de tu base de datos MySQL (llamada "dump") e intentas importarla en tu propia base de datos, es posible que los acentos (como é, à, ô) aparezcan como símbolos extraños, como signos de interrogación (por ejemplo, "?" en lugar de un acento).
Esto ocurre porque las copias de seguridad de MySQL generalmente se crean utilizando un formato especial llamado UTF-8
. En este formato, las letras con acentos ocupan más espacio (están codificadas en dos bytes, un poco como dos "unidades" de datos por carácter). En los servidores, esto funciona bien, pero si trabajas en tu computadora personal, es posible que debas ajustar algunas configuraciones para que la importación se realice correctamente utilizando UTF-8
. El problema de los caracteres extraños generalmente ocurre cuando hay un desajuste de codificación entre el archivo de copia de seguridad y la importación. Esto puede suceder si el archivo está codificado en un formato (por ejemplo, UTF-8
) pero MySQL espera otro codificación (por ejemplo, latin1
).
Aquí tienes algunas soluciones:
- Convertir el archivo: Puede convertir el archivo de respaldo 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 se pueden representar enlatin1
(como ciertos caracteres especiales o no europeos), puede perder estos caracteres durante la conversión. Por lo tanto, es una solución que debe usarse con precaución y depende del tipo de datos presentes en su archivo SQL. - Especificar el formato correcto durante la importación: Si no ha convertido el archivo, puede indicar durante la importación que el archivo está en el formato
iso-latin1
(al importar un archivo SQL, puede especificar explícitamente que el archivo está en ISO-8859-1, también conocido como latin1). Esto permite alinear la codificación del archivo con la esperada por MySQL, lo que generalmente resuelve el problema de los caracteres mal mostrados.
Si ves signos de interrogación en lugar de acentos, probablemente significa que el archivo de respaldo está en un formato diferente a UTF-8
, pero tu software intenta importarlo como si estuviera en UTF-8
. Para evitar esto, en Linux, puedes usar 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.