Error con acentos y eÑes en PHP/MySQL (Solucionado)
Muchas veces al crear una web con PHP y MySQL, ocurre un problema al introducir y mostrar datos: estos se alteran acabando en áóñ y cosas parecidas.
Cuando me pasa esto suelo empezar a toquetear cosas, cambiar charsets y traducir a
ñ
o á
pero nada funciona. El problema es que la configuración del cotejamiento de los caracteres especiales como acentos, eñes y demás símbolos no es el mismo entre la base de datos (MySQL), el lenguaje de servidor (PHP) y el servidor (Apache). Así que me puse a buscar y después de encontrar comentarios buenísimos de gente por los foros puedo hacer un resumen de todo lo necesario cuando nos ocurre un problema de estos (id haciendo y testeando si ya funciona todo bien paso a paso).Guía paso a paso para solucionar el problema de los acentos y eñes
- Cotejamiento
Al crear la base de datos MySQL, asegúrate que los campos string y demás esten enutf8_spanish_ci
y el cotejamiento de las tablas enutf_unicode_ci
(más tarde en Operations > Collation de phpMyAdmin se puede cambiar) - Content type HTML
Pon en el<head>
de todos los archivos HTML:<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- Content type PHP
Y en los puramente PHP (que muestran XML, llamadas de AJAX, APIs…) pon el código:header("Content-Type: text/html;charset=utf-8");
- Set names
Al crear la conexión de PHP con MySQL, envía esta consulta justo tras la conexión:mysqli_query("SET NAMES 'utf8'");
(Para MySQLi escribe$acentos = $db->query("SET NAMES 'utf8'");
) - Convertir codificado a UTF-8
Convierte todo lo que esté codificado delatin1
aUTF-8
SELECT convert(cast(convert(content using latin1) as binary) using utf8) AS content
- Apache
Quita elDefaultCharset
del Apache o modifícalo - htmlentities
Como última y desesperada opción, quita todos loshtmlentities();
y sustitúyelo por otro parser para ‘sanitizar’ los datos.
Haciendo estos pasos se solucionará cualquier problema de codificación de caracteres. Si te ha servido este artículo, ahorra la frustración a otros programadores compartiendo el artículo en Twitter, Facebook o Google+ con los botones de abajo.
Si estás empezando con PHP/MySQL te recomiendo utilizar el código que tengo publicado aquí que es seguro, fácil de usar y funciona muy bien. También está la versión en PDO utilizando named parameters que es incluso más sencilla.
Para aprender a programar lo mejor es que te compres un libro físico para tenerlo al lado del ordenador a modo de consulta/referencia, te recomiendo sin lugar a dudas Domine PHP y MySQL, es el libro mejor recomendado que desde hace muchos años siempre tengo al alcance cuando programo y el hecho de consultarlo físicamente me ayuda a consolidar y memorizar mucho mejor los conceptos.
No hay comentarios:
Publicar un comentario