Inicio Apuntes FPApuntes DAW Cómo solucionar el error con acentos y eÑes en PHP/MySQL utf-8

Cómo solucionar el error con acentos y eÑes en PHP/MySQL utf-8

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

utf 8Después de algún tiempo con la web un tanto abandonada, hoy voy a dejar aquí a modo de apunte para una web que «se supone» que tengo que entregar a final del mes que viene. Cómo esta web tendré que hacerla con una base de datos y el tema que ocupa este post no es la primera vez que me pasa (siempre cometo los mismos errores en las mismas cosas en este aspecto … lo sé). Muchas veces al crear una web con PHP y MySQL, de repente te encuentras con el problema al introducir y mostrar los datos, ya que estos se alteran sin venir a cuento para terminar apareciendo en pantalla algo como áóñ y cosas parecidas. Las primeras veces que me ocurrió, volvía a empezar a las web que me tenía ocupado (que cuando aprendes por tu cuenta, en muchas ocasiones lo más sencillo acaba siendo desandar el camino andado), pero con el paso del tiempo, cuando me volvía a pasar comencé a toquetear cosas, cambiar charsets y traducir a ñ, á  o funciones que no hacían exactamente lo que esperaba que hiciesen.

Tiempo después caí en la cuenta de que 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 como buen autodidacta empecé a buscar un poco sobre el tema y después de encontrar comentarios buenísimos y post sobre el tema que pululan por la red, me he decidido a hacer un resumen de todo lo necesario para cada vez que nos ocurra un problema de este estilo (no es necesario llevar a cabo todos los pasos para que funcione correctamente, depende del entorno en el que cada cual se encuentre, por eso es buena idea que si algún usuario sigue este pequeño listado de consejos, compruebe después de cada paso si ya se ha solucionado el problema). He de decir que a mi todos los «consejos» que aquí voy a escribir, me han solucionado el problema de los acentos y las eñes en uno u otro momento..

Cómo solucionar con estos pequeños apuntes el problema de los acentos y las eñes mediante UTF-8

  1. Cotejamiento
    Al crear la base de datos MySQL, asegúrate que los campos string y demás estén en utf8_spanish_ci y el cotejamiento de las tablas en utf_unicode_ci (más tarde se puede cambiar en Operaciones> Cotejamiento en el  phpMyAdmin)
  2. Content type HTML
    Pon entre el <head></head> de todos los archivos HTML:
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  3. Content type PHP
    Si queremos poner en utf8 un solo campo podremos hacerlo mediante utf8_encode o utf8_decode. En caso de que lo que queramos es codificar toda la página en los archivos puramente PHP (que muestran XML, llamadas de AJAX, APIs…) pon en alguna parte el código:
    header("Content-Type: text/html;charset=utf-8");
  4. Set names
    Al crear la conexión de PHP con MySQL, envía esta consulta justo tras la conexión (para que los nombre sean UTF-8):
    <strong>mysql_query("SET NAMES 'utf8'");</strong>

    Para MySQLi escribe $acentos = $db->query("SET NAMES 'utf8'")

  5. Convertir codificado a UTF-8
    Convierte todo lo que esté codificado de latin1 a UTF-8 con esta sentencia:
    SELECT convert(cast(convert(content using latin1) as binary) using utf8) AS content
  6. Apache
    Quita el DefaultCharset del Apache o modifícalo
  7. htmlentities
    Como última y desesperada opción, quita todos los htmlentities(); y sustitúyelo por otro parser para ‘sanitizar’ los datos.

Estos solo son algunos pequeños apuntes que a mi me han servidor en algún momento (y que a día de hoy sigo utilizando con un 100% de eficacia), pero seguro que no son los únicos que existen, por lo que el día que descubra más, supongo que los añadiré a esta pequeña lista. Para más información, siempre nos quedará gOOgle e informarnos sobre la mejor manera de utilizar los caracteres UTF-8.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

2 Comentarios

Salfer 3 junio, 2016 - 4:07 PM

Perfecto!! me ha venido genial

Respuesta
sapoclay 3 junio, 2016 - 5:06 PM

Me alegro de que te viniese bien … gracias por la visita.

Respuesta

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.