Error con acentos y eÑes en PHP
23 May 2009
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 delos 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 deencontrar 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 apaso).
Guía paso a paso para solucionar el problema de los acentos y eñes
1. Al crear la base de datos MySQL, asegúrate que los campos string y demás esten en utf8_spanish_ci y el cotejamiento de lastablas en
utf_unicode_ci (más tarde en Operations > Collation de phpMyAdmin se puede cambiar)
2. Pon en el de todos los archivos HTML:
3. Y en los puramente PHP (que muestran XML, llamadas deAJAX, APIs…) pon el código:
header("Content-Type: text/html;charset=utf-8");
4. Al crear la conexión de PHP con MySQL, envía esta consulta justo tras la conexión:
mysql_query("SET NAMES 'utf8'");(Para MySQLi escribe $acentos = $db->query("SET NAMES 'utf8'"); gracias Fernando)
5. Quita el DefaultCharset del Apache o modifícalo
6. 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óna otros programadores compartiendo el artículo, Tweetea en Twitter o Comparte en Facebook.
Como último consejo, si estás aprendiendo PHP y MYSQL te recomiendo que te leas el libro PHP y MySQL...
Regístrate para leer el documento completo.