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
Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

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.