Problemas codificacion web. Configurar codificación utf8 php, mysql y html

Después de muchos años y grandes problemas de codificación con php y mysql, puedo afirmar que tengo, bastante controlado el problema con las codificaciones. Bueno por lo menos identificado. Desgraciadamente mi conocimiento se debe a malas experiencias, pero como se dice, casi todo en la vida se aprende a golpes o por las malas. Me he tenido que “pelear” muchísimo con este problema y han sido grandes quebraderos de cabeza.
Aún así se que es uno de los grandes problemas de los desarrolladores y se convierte en algo tremendamente problemático sino se hace bien desde el principio.
Es el momento de escribir un artículo con mis experiencias sobre este asunto. Problemas codificación web. Configurar codificación utf8 php, mysql y html

Hay muchas causas por las que una página web muestre caracteres raros con problemas de codificación en iso o con utf8.
Un listado de los posibles fallos pueden ser los siguientes:

  • Codificación por defecto con la que arranca apache. Hay que indicar una directiva para que apache arranque en utf8
  • Codificación con mysql. Esto es lo más complejo de todo este asunto. Lo explicaré después.
  • Codificación de php.
  • Codificación del html.
  • Por último y no menos importante la codificación con la que se crean y guardan los archivos.

Las codificaciones más frecuentes son iso-8859-1 y utf-8. El problema que se generen caracteres raros reside en la mezcla y utilización de ambas codificaciones al mismo tiempo. Podemos usar iso-8859-1 para nuestra web pero todos los puntos que he comentado anteriormente deben estar en iso. No puede haber mezcla de algunas partes en iso y otras en utf8. Si usamos iso podemos tener una web en español con acentos y eñes funcionando. Incluso en portugués también funcionaría el carácter ç. Pero no funcionaria si queremos hacer una web con alfabeto chino, japones o griego.

Sin duda lo más recomendable y lo que se hace es usar utf8. Todo en utf8.

A continuación indico el tutorial que habría que seguir para solucionar los problemas de codificación.

En un servidor en producción habría que ejecutar todos los cambios al mismo, o plantear una estrategia de migración.
No se puede cambiar el contenido de las tabla a utf8 y que mysql siga en iso, o no se puede cambiar la codificación de los archivos y que sigan las cabeceras en otra codificación diferente.
Bueno en realidad si se puede, pero no creo que sea muy bueno para un usuario que te esta visitando presenciar “el festival” de codificaciones y errores.
Primero hay que localizar el problema y si se considera que tan solo hay que cambiar un punto y que no supone mucho tiempo no habría problema, pero si son varios temas los que hay que modificar sería importante establecer un protocolo de migración. Sobre todo si el problema viene de mysql.

Configurar la codificación del servidor apache con utf8

Apache es una herramienta con la que montamos nuestro servidor de páginas web. Una de las piezas de nuestro puzzle.
Puede afectar a nuestra codificación y su archivo de configuración contiene una directiva para especificar la codificación con la que arranca y que usa el servicio. Esta directiva es AddDefaultCharset .

Editamos el archivo de configuración de apache

vi /etc/httpd/conf/httpd.conf

Y verificamos que existe y está bien establecida la siguiente directiva de configuración para la codificación:

AddDefaultCharset UTF-8

si hemos tenido que cambiar esta directiva, habrá que guardar el fichero y salir

:wq

Después reiniciamos el servicio de apache

# /etc/init.d/httpd restart
Parando httpd:                                             [  OK  ]
Iniciando httpd:                                           [  OK  ]

Configurar la codificación de php en utf8

PHP siempre devuelve una codificación de caracteres por defecto, la cual está definida con la cabecera Content-type.
Siempre hay que especificar del lado servidor el encabezado y la codificacion. Para ello hay que utilizar la función de header() antes de generar cualquier tipo de contenido, por ejemplo:

header ('Content-type: text/html; charset=utf-8');

Lo más común es forzar el charset a utf-8 con la función header() desde nuestro código, pero siempre se puede especificar la codificación de la cabecera editando la configuración del php.ini

vi /etc/php.ini

encontraremos el siguiente párrafo. Tendremos que descomentar la última linea que se indica.

; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header.  To disable sending of the charset, simply
; set it to be empty.
;
; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "utf-8"

Ajustando la codificación de Apache y php, ya tendríamos la configuración del lado del servidor preparada.

Con un sniffer o un proxy comprobaríamos las cabeceras para ver la codificación que devuelve. Tiene que ser algo parecido a esto:

Configurar la codificación html en utf8

Siempre se debe especificar la codificación utilizada para una página HTML o XML. De lo contrario, nos arriesgamos a que los caracteres del contenido aparezcan mal. Esto sería un problema para los usuarios de la web, el humano tendría problemas para leer o distinguir lo que pone, pero también sería un problema de interpretación para las máquinas, los crawlers, robots y arañas que analizan el contenido de nuestra web.

Dentro de la etiqueta head

<head> </head>

habría que incluir la siguiente etiqueta con la codificación del documento html.

En HTML5 se especifica la etiqueta

<meta charset="UTF-8">

En HTML 4 se usa la etiqueta

<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 

Para un documento XML se utiliza la siguiente etiqueta

<?xml version="1.0" encoding="UTF-8"?>

Crear y guardar los archivos en utf8

También hay que tener en cuenta como se guardan los ficheros que se van creando.
No olvidar que los ficheros van a ser ejecutados por php bajo un servidor apache en linux (por lo general). Si se trabaja en windows el IDE usará la codificación del sistema operativo por defecto, iso. Por lo general esto es algo que se puede configurar en cualquier IDE o editor de código.
Hay que tener cuidado con esto y crear una pauta para guardar todos los fichero en utf-8 y si existe la opción, especificar para que sistema operativo o que formato de fichero guardar.


Una diferencia fundamental en los archivos de texto es que UNIX utiliza un sólo salto de línea (LF) o Simple Line Feed para indicar una nueva línea, Windows utiliza un retorno de carro o Line Feed (CRLF). Tan sólo esta diferencia puede hacer que se produzca un error y tardemos muchísimo tiempo en darnos cuenta.

Cuando tenemos problemas de codificación con el propio archivo hay que usar varias herramientas en linux.

El comando dos2unix para convertir los formatos de fichero dos a unix-linux

O utilizar el comando iconv para generar nuevos ficheros en utf8.

iconv -f iso-8859-1 -t utf-8 archivo.php > archivo_utf8.php

Nota: no siempre me ha funcionado esta última técnica.

Configurando el servidor mysql con utf8

Lo mejor para el final! Es lo que da más problemas y lo más difícil de arreglar.
Dentro de la codificación de mysql hay otros puntos que hay que seguir para arreglar los problemas que haya con la codificación. Ya que mysql cuando conecta lo hace con un tipo de codificación, cuando lee lo hace con un tipo de codificación y cuando guarda lo hace con otro tipo de codificación! Todos tienen que estar en utf-8!

El primer paso es ejecutar la siguiente sql.

show variables like '%character%';

Si devuelve el siguiente resultado, es que por lo menos la configuración de mysql en el archivo /etc/my.cnf esta ok

| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |

Si no esta todo en utf-8 tendremos que editar el archivo de configuración de mysql /etc/my.cnf agregando o editando las siguientes directivas dentro de la etiqueta mysqld.

[mysqld]
init_connect='SET NAMES utf8'
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake

Una vez realizados los cambios reiniciamos el servicio de mysql

/etc/init.d/mysqld restart
  • init_connect=’SET NAMES utf8′: Codificación inicial de la conexión de mysql. Define la codificación del cliente, de la conexión y de los resultados de lectura.
  • default-character-set=utf8: Codificación por defecto de la interacción con el usuario.
  • character-set-server=utf8: Juego de caracteres o character ser por defecto del servidor. La directiva character_set_database toma el valor por defecto que tenga definido esta directiva.
  • collation-server=utf8_general_ci: Estable el collation por defecto, que por ejemplo usan las tablas y los campos de éstas.
  • skip-character-set-client-handshake: Ignora la codificación de conexión del cliente, estableciendo la codificación de conexión del servidor. Es un comportamienteo de MySQL 4.

La directiva SET NAMES utf8 equivale a las siguientes 3 directivas:

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

Como se puede ver hay muchas directivas de codificación en la configuración de mysql. Incluso es posible que lo que yo he escrito y me ha funcionado sirva para mucha gente pero a lo mejor hay quien no le sirva y tenga que seguir ajustando directivas. No es algo sencillo dejar funcionando la codificación de mysql a la perfección en el primer intento. En los links que hay al final del artículo incluyo unas lecturas recomendadas entre ellas, la página con todas las directivas del archivo de configuración de mysql my.cnf.

Nota:
ejecutar la sql

mysql_query("SET NAMES 'utf8'");

al crear la conexión no esta mal si el resto de la configuración está bien, sino es un parche, que no esta solucionando el problema de raíz que es la configuración de mysql.

Pues bien hasta este punto tendríamos toda nuestra aplicación funcionando a la perfección en utf8.

Migrar toda la base de datos de latin1 o iso a utf8

Pero claro en base de datos habrá muchos problemas de codificación con registros ya creados. Ahora toca migrar todo el contenido de latin o iso a utf8. Los procedimientos pueden ser varios. Pero lo más recomendable aunque más laborioso es lo siguiente:

  • Parar el servicio de mysql. En caso de que no hayamos hecho los cambios y reiniciado, porque sino haremos todas las modificaciones pero se seguirán generando registros mal codificados.
  • Hacer un mysqldump para exportar toda la base de datos existente.
  • Si el dump de la base de datos no es muy grande podemos editarlo con vi o nano. Habrá que buscar todos los create table y especificar el charset o modificarlo en consecuencia por utf8.
  • CREATE TABLE `TABLA` (                           
                   `id` mediumint(8) unsigned NOT NULL auto_increment,  
                    // resto de campos
                   PRIMARY KEY  (`id`)                                  
                 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 
    
  • Si el collation de cada campo de una tabla esta con iso o latin tambien habrá que cambiarlo por utf8
  • Buscar la sql que crea la base de datos y cambiar o modificar el character set y el collate a utf8
  • CREATE DATABASE MI_BASE_DATOS
      DEFAULT CHARACTER SET utf8
      DEFAULT COLLATE utf8_general_ci;
    
  • Ahora hay que buscar y reemplazar cada uno de los carácteres que están mal codificados por su correspondiente vocal con acento o letra. Para reemplazar desde el vi utilizar el siguiente comando
  • # reemplaza el caracter á por á
    :%s/á/á/g
    # así con cada una de las vocales
    :%s/í©/é/g
    :%s/Ã/í/g
    :%s/ó/ó/g
    :%s/íº/ú/g
    :%s/ú/ú/g
    :%s/ñ/ñ/g
    :%s/í‘/Ñ/g
    
  • Una vez que todo está en utf8 y todo el texto y contenido de las base de datos esta bien formateado y codificado. Borramos la base antigua o la reemplazamos por el mysqldump que acabamos de editar.
  • Arrancamos mysql y listo

Si en las tablas siguen quedando carácteres residuales, se pueden lanzar sqls para remplazar automaticamente.

Sqls para modificar los carácteres mal guardados.

update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'á', 'á');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'í©', 'é');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'Ã', 'í');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ó', 'ó');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'íº', 'ú');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ú', 'ú');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ñ', 'ñ');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'í‘', 'Ñ');   

Para reemplazar carácteres con entidades html

update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, '&aacute;', 'á');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, '&eacute;', 'é');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, '&iacute;', 'í');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, '&oacute;', 'ó');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, '&uacute;', 'ú');
update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, '&ntilde;', 'ñ');

En este punto ya tendremos también nuestro contenido de la base de datos bien codificado e insertado.

Importante! Una vez que esto esté configurado habría que ir quitando todos los utf8_decode(); y utf8_encode(); de la programación. Si todo está bien configurado ya no se necesita estar codificando y decodificando el texto que vamos guardando en base de datos y mostrando en la web.
Adicionalmente ya no se pueden usar las funciones de php para procesar cadenas de texto tales como strtolower(), substr(), etc.. sino que hay que usar las respectivas funciones mb_string() o Multibyte que son las encargadas de tratar los textos en utf-8 que tienen un numero mayor de bytes.

Como conclusión final, hay que añadir que también tener una buena metodología y acostumbrarse a hacer bien las cosas es fundamental, de manera que por ejemplo siempre nos tenemos que fijar como se guardan los ficheros, en que codificación creamos una base de datos, sus tablas y sus campos,etc… Es algo muy sencillo pero requiere ser metódico, cuesta empezar a serlo.

Espero les resulte útil, y no duden en dejar algún comentario con sus dudas, preguntas o inquietudes.

Lecturas recomendadas :
http://www.iana.org/assignments/character-sets
http://www.w3.org/International/O-HTTP-charset
http://www.w3.org/International/techniques/server-setup#characters
http://www.w3.org/TR/i18n-html-tech-char/#ri20030112.213746362
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html
http://dev.mysql.com/doc/refman/5.0/es/charset-connection.html

Autor: Pedro Ventura

Tags de búsquedas:

codificación,problemas codificacion php,problema en codificacion del texto web,android tablet china navegador web sin ñ,guardo slash en bd pero no se muestran en html,en linux manda error objetos con ñ,caracteres en portugues php,escribo una palabra y sale otra codificación,Como enviar una palabra con acento o ñ a la base de datos,cambiar automaticamente el juego de caracteres en Mysql en linux,problema codificado,configurar codificación,configurar mySQL UTF-8 2015,crear base de datos en mysql para que guarde eñes,codificacion utf8

Contenido patrocinado

126 comentarios en Problemas codificacion web. Configurar codificación utf8 php, mysql y html

  1. Kelita
    / Responder

    Mi mobil no me permite abrir documentos que me envían..

    Me aparece que hay error de codificación y no se que hacer..
    Me puedes ayudar

  2. Federica
    / Responder

    Un millón de gracias!!!
    Tengo MySQL 5.5.41 y la configuración del my.cnf que me funcionó fue ésta:

    [mysqld]

    init_connect=’SET collation_connection = utf8_unicode_ci’
    init_connect=’SET NAMES utf8′
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake

  3. Jose Ramon Orozco Font
    / Responder

    Pedro Olvide comentarte que los caracteres que me aparecen son solo (?) signos de interrogación dentro de un fondo triangular obscuro , probablemente esto te diga algo. saludos de nuevo

  4. Jose Ramon Orozco Font
    / Responder

    Hola Pedro, gran investigación y aportacion, te comento mi problema , cuando pruebo mi sistema en mi maquina con wamp todo funciona perfecto, pero en cuanto lo subo al sitio web empiezan los problemas con los acentos y demás, te comento que si tu los vez con phpmyadmin dentro de la BD están ok lo mismo que los mensajes que envió dentro de los programas al revisarlos están ok con sus acentos y ñs pero al ejecutar se arma el desastre, el problema es que no se que hacer por que es un web hosting y no se como modificar. De acuerdo a la información que te doy cual crees que deba ser el problema, yo trabajo con ISO por que no necesito soporte para otros lenguajes y mi bd (mysql) está en latin-general-ci todo. Espero te puedas dar un tiempo para que me orientes sobre que debo hacer,y te felicito por tu articulo es de lo mas completo que hé visto en la web, te mando un abrazo, no se que nacionalidad tengas pero saludos desde México.

  5. / Responder

    Gracias, eres un capo!!

  6. / Responder

    Gracias por la información, he aplicado todas las sugerencias indicadas, no logro resolver este detalle, mi sitio: http://www.expedicionesmayas.es de un momento a otro empezó a presentar estos caracteres, compre otro dominio y hosting, subí una copia sin problema. Saludos

  7. Jorge Garza
    / Responder

    Es la primera vez que encuentro una solución consistente —hasta donde puedo ver—, desde abajo hasta arriba, y digo hasta donde puedo ver porque ya chequé mi php.ini y no entiendo por qué el estúpido apache y php sigue saliendo con iso-8859 (o el que sea) por default, hace años, tal vez 15, que escribo todo en utf-8 y siempre he tenido el mismo problema y ni el soporte de softlayer, hostgator, cwi, (el godaddy ni cuenta), y otros tantos, habían entendido el problema. Voy a planear el cambio, me va a tomar un rato porque es, supongo, a todo lo largo y ancho del servidor, y está también la actualización de todo el php a v 7, pero hay que hacerlo. Mil gracias.

  8. / Responder

    Hola. Fantástico artículo. Aquí aporto una solución a la hora de exportar e importar datos:
    http://www.oscar-dominguez.com/blog/desarrollo-web/solucionar-error-al-importar-una-base-datos-mysql-utf-8/

  9. Raúl Xaora
    / Responder

    Hola!
    Estoy intentando seguir los pasos para no tener problemas con la codificación. Cuando llego a configurar el servidor mysql con utf8, es cuando tengo problemas, porque busco el archivo mysql /etc/my.cnf y añado las líneas que pones y cuando reinicio los servidores, el MySQL Database ya no se inicia. No sé qué puedo hacer?

  10. AA
    / Responder

    Hice un mail con una plantilla de Mailchip. La cargo al servidor y cuando veo el mail por el móvil se ve cortado. No figura la barra de desplazamiento. Según leyendo es un problema de “adaptabilidad de la página”.
    ¿Cómo puedo solucionarlo?

  11. Tatiana
    / Responder

    Gracias por compartir la información… he logrado solucionar el problema.

    ahora tengo otro inconveniente y es que necesito poner en mayúscula la primera letra de cada palabra al guardar en la base de datos y ps como lo comentas al final no se pueden utilizar las funciones de cadena.

    Gracias

  12. María Rosa
    / Responder

    Hola Pedro, por lo que veo todos los comentarios hacia tí son excelente, me alegro, buen profesional.
    Ahora bien, tambien veo que el nivel de la gente es muy alto, yo intento defenderme, pero no se si saldré de ésta.
    Mi problema es: al guardar un archivo algunas vocales salen con un rombo. Como lo soluciono??
    Gracias y felicidades por tus exitos.

  13. / Responder

    Gracias me ha servido de mucha ayuda.

  14. / Responder

    Gracias

  15. yordy riascos
    / Responder

    este post me ayudo y me enseño en grande mysql_query(“SET NAMES ‘utf8′”);

  16. Luis Duran
    / Responder

    Hola estimado Pedro muchas gracias por tus interesantes aportes, quería consultarte algo, soy nuevo en esto de la programación web y actualmente estoy haciendo una pagina (solo html5, css y js) y tengo un problema bien particular tengo todos mis archivos codificados correctamente pero en todos los títulos (h1, h1…) no me salen los caracteres especiales pero en los textos normales si… agradezco de tu ayuda para ver como soluciono este detalle..

    Saludos…

  17. Julio
    / Responder

    Hola Pedro. Muchisimas gracias por este tutorial que ha sido para mi un rayo de luz en la oscuridad. Llevo una semana desesperado buscando en la red e intentando recuperar mi servidor local que funcionava perfectamente en ubuntu 1.4 y despues de leer tu artículo me vino a la cabeza los últimos pasos que di antes de que se fuera todo al garete. Para colmo no tengo copias de seguridad y estoy apavorado

    Creo que el problema puede ser la codificación que comentas. Me dejó de funcionar al importar una base de datos de nombres científicos que son codificados en latín. No se si puede haber sido ese el problema.

    El caso es que cuando entre en phpmyadmin aparecen las bases de datos pero con las tablas vacías y dándome el “error 1146 La tabla no existe”. Al entrar en las webs en localhost me dice “Error estableciendo una conexión con la base de datos”

    E ejecutado “show variables like ‘%character%’;” y me da

    mysql> show variables like ‘%character%’;
    +————————–+—————————-+
    | Variable_name | Value |
    +————————–+—————————-+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | latin1 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | latin1 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    +————————–+—————————-+
    8 rows in set (0.00 sec)

    He ido a la ruta que comentas “/etc/my.cnf” pero no tengo ese archivo. Sí tengo el archivo en “etc/mysql/my.cnf” . ?Seria ese el archivo donde editar la directiva que comentas??. Si es ese, ya lo e intentado pero no va. Te agradeceria mucho que me orientaras

    Un cordial saludo

    • Pedro Ventura
      / Responder

      Hola Julio,

      Efectivamente, en Ubuntu el archivo my.cnf está en la ruta /etc/mysql/my.cnf. La ruta /etc/my.cnf es en CentOS.

      Antes de editar nada, haz una copia de ese archivo.

      Revisa que el backup que has importado no te ha sobreescrito los usuarios que tienen conexión a la base de datos, en las tabla user de la base de datos mysql.

      Llegados a tal punto de bloqueo, te recomiendo hacer backup de tu base de datos. Y desinstalar todo mysql y phpmyadmin con un -purge para eliminar las configuraciones y demás. Luego lo vuelves a instalar y montar todo otra vez.

      Ánimo!

      • Julio
        / Responder

        Hola Pedro y gracias por tu consejo. Despues de intentarlo todo creo que tendré que hacer lo que dices: “hacer backup de tu base de datos. Y desinstalar todo mysql y phpmyadmin con un -purge para eliminar las configuraciones y demás. Luego lo vuelves a instalar y montar todo otra vez.”
        El problema es que no se como hacer esos backup de las bases de datos porque normalmente los hacia desde phpmyadmin en formato sql comprimidos en .zip pero como te comenté, phpmyadmin no me consigue leer los contenidos de las tablas y me da el mensaje “No se han encontrado tablas en la base de datos.” aunque las tablas aparecen en la lista de la columna izquierda, aparecen como vacias. Si supieras un método para hacer esos backup sin usar phpmyadmin te lo agradeceria.

        Muchas gracias y saludos

  18. Gustavo
    / Responder

    Tengo una tablet con android. Y el problema que tengo que no muestra la ñ enlas paginas web. Y cuando es ten mi casilla de correo, no genera los simbolos o iconos como por ejemplo cuando ha sido un mail ya leido.
    Me podraís ayudar. Es problema de la tablet o es el programa que no funciona.
    Gracias

  19. Juan jose
    / Responder

    Exporte una data que estaba en tablas de Word a hojas de excel, claro que tuve que hacer algunos arreglos como eliminar filas en blanco y crear una columna con codigos que luego me servirian como campo indice. El problema era que al convertir la hoja en un archivo .csv (del inglés comma-separated values) e importarlo desde phpmyadmin (uso Wampserver para mi proyecto web) los caracteres en español no eran reconocidos sino que eran sustituidos por el signo “?”. Lei y aplique casi todo lo que Pedro recomienda en este artículo, y aunque inicialmente no resultó, si aprendi a tomar en cuenta todos estos detalles para mejorar la compatibilidad de tablas y data en español para otros proyectos. La solución fue abrir los archivos . csv con el bloc de notas de Windows (es el sistema en el que estoy trabajando) y guardarlos como .txt pero ASEGURANDOME de que en la opción “guardar como” se debe fijar la pestaña “codificar en” seleccionar UTF-8 solo cambie la extensión .txt a .csv en cada archivo guardado y volví a importar desde phpmyadmin y ahi si importó correctamente los caracteres en español hacia las nuevas tablas. Gracias Pedro por esta contribución..

  20. Edgard Hinostroza
    / Responder

    Extraordinario post! doctor…
    me has ayudado un huevo (coloquialmente hablando), eres el Tony Stark del php…

    Muchas gracias Pedro,
    Que Goku guíe tu camino!

    Saludos de Perú

  21. ALEX
    / Responder

    Gracias Pedro…. me salvastes estaba padeciendo con los UTF-8.
    Muy buen post…FELICITACIONES ..!! y gracias por compartir tu conocimiento.
    Dios te Bendiga y te de mucha sabiduría.
    Saludos desde Perú.

  22. / Responder

    Hola:
    Se que el post es algo antiguo pero sabes me sirvio 1000 ya que estuve teniendo problemas con los caracteres raros lo acabo de hacer como dices y me ha solucionado todos los problemas.

    Bueno como dato te aviso que cuando encontre esta pagina en google al acceder me salio el simbolo de advertencia de sitio peligroso. Ingrese bajo mi propio riesgo y en realidad valio la pena. Pero, en serio, revisa bien tu cuenta de hosting no sea que tengas algun bicho por ahi.

    No olvides echarle un vistaso a mi sitio.
    Saludos.

  23. Dennis
    / Responder

    Gracias Pedro.

    La solución que presenta me funcionó perfectamente.

    Saludos desde Costa Rica…!!!

  24. / Responder

    Thanks for your marvelous posting! I seriously enjoyed reading it,
    you can be a great author. I will make sure to bookmark your blog and will often come back in the foreseeable future.
    I want to encourage continue your great posts, have a nice day!

    my blog post – obama care survival guide

  25. / Responder

    Debo mencionar una corrección urgente antes que le pase a alguien más como me pasó a mi, tanto en la entrada como en los comentarios han publicado soluciones como esta:

    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, ‘á’, ‘á’);
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, ‘í©’, ‘é’);
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, ‘Ã’, ‘í’); // <-
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ó', 'ó');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'íº', 'ú');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ú', 'ú');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ñ', 'ñ');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'í‘', 'Ñ');

    El problema está en que en la tercera linea reemplazamos todos los 'Ã' por 'í', esto significa que todos los reemplazos siguientes que contengan el carácter 'Ã' no encontrarán dicho carácter.

    Me explico, si tengo este texto:
    'ñú'

    Que es la palabra 'ñu' codificada en latin1, primero se reemplazarán todas las 'Ã' por 'í' quedando así:
    'í±íº'

    luego reemplazará todas las 'íº' por 'ú' quedando así:
    'í±ú'

    por último reemplazará todas las 'í‘' por 'Ñ' quedando así:
    'ѱú'

    Como solucionarlo? simplemente hay que poner la tercera linea al final, o sea así:
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'á', 'á');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'í©', 'é');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ó', 'ó');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'íº', 'ú');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ú', 'ú');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'ñ', 'ñ');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'í‘', 'Ñ');
    update TABLA set CAMPO_REEMPLAZANDO = replace(CAMPO_REEMPLAZANDO, 'Ã', 'í'); // <-

    Espero les sirva 🙂

  26. Pao
    / Responder

    Hola Pedro, oye yo tengo un problema, al guardar desde un formulario en la base de datos de mysql, los acentos no los guarda bien, aparece un cuadrito nada mas y si ejecuto el mismo query en la consola, los acentos los guarda bien, que crees que sea????’ ayuda plis!!!

  27. Ausiàs
    / Responder

    Muy útil. Gracias por compartirlo.

  28. / Responder

    Excelente post!! Me fue de gran de ayuda! Gracias

  29. / Responder

    My family members all the time say that I am killing my time here at net, but I know I am getting familiarity daily by reading thes
    fastidious articles.

  30. Diego
    / Responder

    Para los que no les funciona ninguna de estas opciones excepto la de ultimo recurso (REPLACE) de consulta MySQL, me pasó que al crear un usuario con privilegios limitados se mostraban los caracteres raros para los acentos y Ñ, no sabia realmente que era hasta que lo descubrí, para los que tienen PHPmyAdmin tienen que tickear en opciones de administración de usuario marcar la opcion SUPER, y también mediante consola se puede pero no me acuerdo como era pero asi se les resuelve el problema. es raro que ocurra pero así lo solucione.

  31. rodrigo
    / Responder

    Estimado, no se por que no funciona cuando escribo Términos o Tí©rminos para obtener la palabra Términos,

    Si escribo Términos me da Téminos, lo mas cercano al exito fue escribir Téirminos pero me mostro Téirminos, quita la i que sobraba y tambien se fue la r quedando Téminos.

  32. Alberto
    / Responder

    Hola Amigo, que excelente web! muy llena de consejos muy útiles, por lo que quería pedirte ayuda.
    Sucede que algunos usuarios de un sitio que administro no pueden guardar en borrador ni publicar sus entradas porque al realizar estas acciones dando clic en los botones guardar en borrador o publicar los manda a una página fuera del sitio con un mensaje que dice que no se puede conectar con el sitio y que revisen el servidor proxy. En mi caso, como administrador puedo realizar cualquier operación dentro del sitio aunque esté en otro edificio.
    Hace unas horas me conecté desde otra máquina ubicada en el mismo edificio en el que están los usuarios que tiene estos problemas e ingresé con otro usuario y pude realizar las operaciones que te mencioné.
    ¿Cual podría ser el problema? Por favor ayudame!!!

    Gracias por tu ayuda.

  33. itxel
    / Responder

    Hola Pedro.

    Tus tutoriales me han servido, ahora ya tengo todo el mysql trabajando con utf8_general_ci y la base de datos con sus tablas también están es utf8_general_ci pero sigo teniendo el mismo problema en Wrodpress cuando agrego un post por ejemplo con este título:
    El extraterrestre camino al exilio 1×01. Desde el editor de wordpress la “x” situada entre los números se aparece sin problema. Tal cual lo puedes ver por ejemplo aquí: https://img708.imageshack.us/img708/976/37n.png

    Pero cuando lo valido, cuando pulso publicar o guardar como borrador la “x” cambia tal y como puedes ver en esta otra imagen https://img17.imageshack.us/img17/9083/vl4.png
    y esto me está haciendo que dupliquen los posts.

    La verdad me estoy volviendo loca porque ya no sé que más hacer…

    Alguna idea de qué puede suceder?

    Saludos y gracias por los tutos y consejos

    • Pedro Ventura
      / Responder

      Desactiva el plugin ese que tienes de ultimate TinyMCE, a ver si te está creando caracteres de entidad html.

      Ya nos cuentas

  34. Pingback: Anónimo

  35. marcos
    / Responder

    pana tengo mi db de dato conectado a php como hago para que vincule con htlm gracias espero tu repuesta

  36. adalberto
    / Responder

    Hola Pablo, he realizado todo lo que mencionas… pero mi problema sigue siendo el mismo… cuando cargo por ejemplo… “comunicación”… en la base de datos solo carga comunicaci….. y ya no carga nada despues de la tilde… por ejemplo… que podria ser el problema? Saludos!!

  37. Pedro
    / Responder

    Tocayo, solo decir que has salvado muchas vidas (la mía es una)
    Esta es mi página de inicio, el primero de mis favoritos, en fin, el comienzo de todo Internet!
    Bueno el sitio todo es muy interesante y lo sigo asiduamente!
    Saludos desde Chile!

    Pedro

    • Pedro Ventura
      / Responder

      Hola Tocayo!!

      Me alegro de haberte salvado la vida! jejeje

      Que bien que sigues el blog! Espero que te siga gustando, si tienes cualquier recomendación o sugerencia para mejorar el sitio no dudes en enviarmela por email

      Un saludo!

  38. Vero
    / Responder

    Hola Pedro, antes que nada me gustaria felicitarte y agradecerte la informacion que suministras, es verdaderamente muy buena…
    Paso a comentarte, tenemos un problema al imprimir, que no muestra las “ñ”, nuestro servidor web es un linux …, la base de datos de postgres seteada en Latin1, el lenguaje es php, y desde php generamos un archivo txt, que se imprime por linea de comandos desde linux a la impresora. El txt generado, queda con caracteres extraños, en reemplazo de las ñ, hemos probado muchisimas opciones sin obtener resultados positivos.. Podrias asesorarnos con este problema??? Muy agradecida desde ya,

    • Pedro Ventura
      / Responder

      Hola Vero,

      Muchas gracias por tu comentario!
      Pues la verdad que con postgre no tengo mucha experiencia, pero es similar a MySQL y por lo que me comentas ya tienes un problema de codificaciones en base de datos, ésta debería estar en utf8 y no latin. Prueba a usar las funciones de php de utf8_encode(); utf8_decod(); para ver si solucionas el problema, pero deberás revisar la codificación de toda la plataforma.

      Un saludo!

  39. / Responder

    Hola Pedro, mi problema es que desde el escritorio adminstrador de wordpress, todo se bien, incluso al examinar las bases de datos, los post están bien regitrados, pero deslogeado y como simple visitante todos los caracter “raros” se ven tildados. Agradeceré tu ayuda o la de alguien que haya tenido el mismo problema

  40. pilar
    / Responder

    hola.. tengo mi aplicacion lista pero no se que error cometi que ahora cuando la abro en el navegador me sale lineas de codigo condicionales y debajo es que muestra el formulario de registro pero ya no me hace ninguna funcion.. podrian ayudarme?

  41. Luis
    / Responder

    Hola:
    Tengo mis html en utf-8 y cuando los subo al servidor se me cambian a 8859-15, ¿cómo lo puedo eviar?
    Gracias

    • Pedro Ventura
      / Responder

      posiblemente sea por la codificación que estable el software que utilizas para subir los datos al servidor. Que software estas usando?
      Te recomiendo que para subidas a producción de ficheros uses deployHQ http://www.deployhq.com/ que es una buena herramienta para llevar a cabo el proceso de subida al servidor. Esto como herramienta online.
      Sino prueba a usar FileZilla y revisa la codificación que tienes por defecto.

      Un saludo!

  42. zapmarbe
    / Responder

    alguien sabría como solucionar lo siguiente:
    He realizado una applet cuyo funcionamiento es leer el Dni Belga, el problema son los acentos por mucho que cambio la etiqueta meta no me salen correctamente los acentos, os dejo el html de la applet

    Lector html

  43. Christian Frausto Bernal
    / Responder

    Muchas gracias !!!! Configure el sitio como indicas en utf8, ya estoy sustituyendo los caracteres erroneos en el sitio.
    Hice un archivo de texto con los “update” y lo importe en el phpmyadmin, le indique la codificacion del archivo que subia era latin1, ya que trate con utf8 y me cambiaba los caracteres del inicio en esta parte:

    replace(CAMPO_REEMPLAZANDO, ‘á’, ‘á’);
    si lo importaba como utf8, ponia
    replace(CAMPO_REEMPLAZANDO, ‘á’, ‘ilegible’);

    Gracias!

  44. / Responder

    Utilizo mucho esta entrada del blog, es mi guía para algunas configuraciones del LAMP, hoy entré y vi un nuevo diseño del sitio (con entradas muy interesantes por cierto) y que cambió el URL (cuidado que te debe caer el posicionamiento).
    Por supuesto que con el buscador lo encontré de nuevo, actualicé mi marcador y de paso me llevé un par de notas interesantes. Muchas gracias por tu tiempo y tus conocimientos.

  45. Pingback: Cakephp codificacion en utf8

  46. / Responder

    Tu post és excelente. gracias.

  47. Damian
    / Responder

    Ya había realizado todo eso que comentas y sigue igual.
    Por ejemplo en nuestro sitio aparecen caracteres raros al hacer clic en una página indexada por Google desde su navegador.

    Por ejemplo, nuestra web aparece indexada de la siguiente forma en Google:
    http://www.glosarioit.com/#!Configuración

    pero al hacer clic en ese enlace lo convierte a:
    http://www.glosarioit.com/#!Configuraci%C3%B3n

    (Lo pueden ver escribiendo en Google site:glosarioit.com y hacer clic en aquellas entradas donde el término posea acentos o espacios).

    Lo que hace es cambiar la vocal acentuada por caracteres raros, lo mismo pasa con los espacios (en este caso remplazándolos por %20).

    Lo curioso es que esto no pasa en Mozilla Firefox, sólo sucede con (Chrome, IE, Opera y Safari). Todo nuestro sitio, como la base de datos, servidor está en utf-8.
    Puede ser que el problema sea de como interpreta el agente de usuario de estos navegadores los caracteres acentuados o espacios.

  48. Camilo
    / Responder

    Excelente post, qué buen estudio y qué buenas conclusiones has sacado.
    Muchas gracias.

  49. Charly Rosero
    / Responder

    Felicitaciones, este sin duda alguna que este es un post muy completo. gracias por el aporte !!

  50. UnIcK
    / Responder

    Excelente tu Post amigo! Felicidades, me ha servido de mucho y gracias a el he podido montar mis servidores con una configuraci’on m’as correcta.. muchas gracias!!

  51. Pablo
    / Responder

    Pedro:

    Nunca escribí esto: ¡Sos un CAPO !!!!!! Funcionó y tenía mal la BD y los archivos! Muchas otras veces tuve estos problemas y me desquiciaron. Nunca vi un articulo que compendie y resuma tan bien los kilometros de explicaciones en vano, que al aplicarlas arreglan algún aspecto pero dejan otros mal (y uno concluye que la prueba no funcionó).
    Excelente!! Días de trabajo ahorrados!!
    Muchas gracias!!!

  52. / Responder

    Dejo esta solución que es más fácil para las personas sin tanta experiencia en computación, sólo es cuestión de pegar y arrastrar.
    .
    =SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(SUSTITUIR(A1;”á”;”á”);”é”;”é”);”í”;”í”);”ó”;”ó”);”ú”;”ú”);”ñ”;”ñ”)

  53. menanti
    / Responder

    hola, estuve leyendo todo el hilo y otros similares y una vez apliqué todo sigue el error. estoy trabajando con una plantilla activeden en local, cuando ejecuto el swf se ven bien todos los caraceres, ahora cuando es a través del index.html salen caracteres extraños en lugar de las ñ o las tildes,intenté embeber los caracteres áéíóúñÁÉÍÓÚÑ, puse en el primer fotograma del .fla System.useCodepage = true, probé con la codificación UTF-8 y con iso-8859-1,pero no hay manera, la subí también a mi servidor para ver si se solucionaba el problema tampoco.ya no sé que más hacer. llevo horas leyendo información y buscando souciones pero no doy con ello.

    agradezco infinitamente cualwquier ayuda

  54. Cristian Romero
    / Responder

    Muy buen aporte, gracias por la información.

  55. juananruiz
    / Responder

    Gran artículo, me lo guardo en la recamara para una lectura más tranquila. Os recomiendo también este artículo sobre el tema de utf8 en mysql (es una copia, el artículo original ha desaparecido) http://wiki.us.es/juanan/wakka.php?wakka=Utf8EnMysql

  56. Víctor
    / Responder

    Pedro, excelente artículo! Gracias por compartir esto.

  57. / Responder

    Gracias Pedro, eres un crak!

  58. Tomás
    / Responder

    Noooooo.

    No hagan mucho caso de lo último de mi anterior comentario, simplemente, al cambiar de database se cambia la variable.

    Al hacer un “use ” toma el que está por defecto. No se ya… bff…
    No puedo solucionarlo ahora por falta de tiempo, que alguien comente si tiene la solución.

  59. Tomás
    / Responder

    Hola.
    Gracias por este post, necesitaba saber lo de mysql. A mi me funcionó casi todo(bueno, no lo he probado pero me cambió las variables), pero el único problema ya lo solucioné, te lo explico por si quieres actualizar.
    Lo primero, tengo linux, pero como en este mundo capitalista todo nos lo enseñan en windows, de momento estoy desarrollando con Wamp, editando php en netbeans y por eso igual esto les pasa solo a los que están haciendo como yo, ahí voy:

    En el tema de las variables (show variables like ‘%character%’;) me cambió todas menos 2, buscando más por la web encontré algunas líneas más de configuración. Asegurarte de que tienes estas líneas o insertarlas en sus secciones (además de las tuyas):

    [client]
    default-character-set=UTF8
    [wampmysqld]
    default-character-set=UTF8
    [mysqld]
    character-set-filesystem=UTF8
    character-set-server=UTF8
    default-collation=UTF8_general_ci

    Y después de eso aún queda una variable por utf8ar: ‘character_set_database’, mirando en la página de mysql vi que la variable se asigna al cambiar un esquema por defecto.
    Lo que hay que hacer es un nuevo schema(yo lo he hecho en mysql query), crear una tabla con la codificación utf8, click derecho sobre el schema nuevo y pinchar en “make Default schema”(hacer esquema por defecto) y bum! variable a utf8.

    Bueno, espero que lo leas y se pueda incluir, para así ahorrar cabezazos contra la pared a otros programadores.
    Saludos.

  60. Tomás
    / Responder

    Hola.
    Gracias por este post, necesitaba saber lo de mysql. A mi me funcionó casi todo(bueno, no lo he probado pero me cambió las variables), pero el único problema ya lo solucioné, te lo explico por si quieres actualizar.
    Lo primero, tengo linux, pero como en este mundo capitalista todo nos lo enseñan en windows, de momento estoy desarrollando con Wamp, editando php en netbeans y por eso igual esto les pasa solo a los que están haciendo como yo, ahí voy:

    En el tema de las variables (show variables like ‘%character%’;) me cambió todas menos 2, buscando más por la web asegurarte de que tienes estas líneas o insertarlas en sus secciones (además de las tuyas):

    [client]
    default-character-set=UTF8
    [wampmysqld]
    default-character-set=UTF8
    [mysqld]
    character-set-filesystem=UTF8
    character-set-server=UTF8
    default-collation=UTF8_general_ci

    Y después de eso aún queda una variable por utf8ar: ‘character_set_database’, mirando en la página de mysql vi que la variable se asigna al cambiar un esquema por defecto.
    Lo que hay que hacer es un nuevo schema(yo lo he hecho en mysql query), crear una tabla con la codificación utf8, click derecho sobre el schema nuevo y pinchar en “make Default schema”(hacer esquema por defecto) y bum! variable a utf8.

    Bueno, espero que lo leas y se pueda incluir, para así ahorrar cabezazos contra la pared a otros programadores.
    Saludos.

  61. / Responder

    Muy bueno el tuto, en especial bastante bien completo, espero que de resultado nomas en el servidor y los derivados en html ó php, gracias un abrazo desde peru…

  62. Jazmin
    / Responder

    HOLA. PUES ANDANDO POR AQUI UN RATO GOOGLEANDO COMO DICEN MUCHOS EN PODER SALIR DE UNA,PERO UNA MUY GRANDE DUDA. ME TOPE CON ESTA TU PAGINA Y LELLENDO PUES PENCE PROBABLEMENTE ESTA PERSONA ME PUEDE SACAR DE ESTA DUDA Y COMO PODER RESOLBERLA, BUENO MI PREGUNTA ES ESTA Y SI ESTA A BIE CONTESTARLA TE LO AGRADECERIA MUCHO. MIRA ANDA UN PROGRAMA DE NOMBRE HIRENS BOOT ISO, Y POR PROBLEMAS EN MI LAPTOP PUES YO LO DESCARGUE DE SU PAGINA, PERO ME TOPE CON LA SORPRESA DE EL PROBLEMA ESQUE ESTA EN EL IDIOMA INGLES, BUENO PERO DENTRO DEL UN ARCHIVO VIENE ALGUN ARCHIVITO PARA PONERLO O CAMBIARLO AL IDIOMA ESPAÑOL O LATINOAMERICA. CLARO Y OVIO PUES QUE YO LO HICE PERO NO ME RESULTO EL PATCHESITO, SIGIENDO LOS PASOS COMO SE INDICAN SEGUN TUS CONOSIMIENTOS COMO O PORQUE NO SE ME CAMBIO AL IDIOMA ESPAÑOL QUE ES LO QUE YO QUIERO?? NO SE SI TU ME PUEDES AYUDAR EN ESTE PEQUEÑO PROBLEMITA QUE YA LO HICE DE MIL FORMAS Y NO ME A DADO RESULTADO…. AYUDA POR FA SI TU ME PUEDES AYUDAR GRACIAS POR TU ATENCION Y HASTA LA PROXIMA …..ADIOS.

  63. guillermo
    / Responder

    Gracias por tu explicación. Llevo unos días con problemas con la codificación y finalmente hice una función para remplazar los caracteres con tildes, “eñes”, diéresis, etc.

    El problema que tengo es que tanto “Á”, como “Í”, como “í” me aparecen en mi base de datos como este caracter “Ô, por lo tanto a la hora de reemplazarlos a utf-8 español no se si correspondía a una u otra vocal acentuada. En tu código saltas algunas vocales, si tienes la solución contesta por favor, me serías de gran ayuda.

    Gracias

    • Pedro Ventura
      / Responder

      Te paso un listado que he encontrado de los caracteres codificados en iso y sus respectivas entidades html, pero recuerda pasarlos directamente a utf8, no a las entidades html. Al lado en inglés pone que letra y que lleva.

      "Á"   =>   '&#193;',       //latin capital letter A with acute
      "á"   =>   '&#225;',       //latin small letter a with acute
      "Â"   =>   '&#194;',       //latin capital letter A with circumflex
      "â"   =>   '&#226;',       //latin small letter a with circumflex
      "Æ"   =>   '&#198;',       //latin capital letter AE = latin capital ligature AE
      "æ"   =>   '&#230;',       //latin small letter ae = latin small ligature ae
      "À"   =>   '&#192;',       //latin capital letter A with grave = latin capital letter A grave
      "Ã "   =>   '&#224;',       //latin small letter a with grave = latin small letter a grave
      "Ã…"   =>   '&#197;',       //latin capital letter A with ring above = latin capital letter A ring
      "Ã¥"   =>   '&#229;',       //latin small letter a with ring above = latin small letter a ring
      "Ã"   =>   '&#195;',       //latin capital letter A with tilde
      "ã"   =>   '&#227;',       //latin small letter a with tilde
      "Ä"   =>   '&#196;',       //latin capital letter A with diaeresis
      "ä"   =>   '&#228;',       //latin small letter a with diaeresis
      "Ç"   =>   '&#199;',       //latin capital letter C with cedilla
      "ç"   =>   '&#231;',       //latin small letter c with cedilla
      "É"   =>   '&#201;',       //latin capital letter E with acute
      "é"   =>   '&#233;',       //latin small letter e with acute
      "Ê"   =>   '&#202;',       //latin capital letter E with circumflex
      "ê"   =>   '&#234;',       //latin small letter e with circumflex
      "È"   =>   '&#200;',       //latin capital letter E with grave
      "è"   =>   '&#232;',       //latin small letter e with grave
      "Ð"   =>   '&#208;',       //latin capital letter ETH
      "ð"   =>   '&#240;',       //latin small letter eth
      "Ë"   =>   '&#203;',       //latin capital letter E with diaeresis
      "ë"   =>   '&#235;',       //latin small letter e with diaeresis
      "Í"   =>   '&#205;',       //latin capital letter I with acute
      "í"   =>   '&#237;',       //latin small letter i with acute
      "ÃŽ"   =>   '&#206;',       //latin capital letter I with circumflex
      "î"   =>   '&#238;',       //latin small letter i with circumflex
      "Ì"   =>   '&#204;',       //latin capital letter I with grave
      "ì"   =>   '&#236;',       //latin small letter i with grave
      "Ï"   =>   '&#207;',       //latin capital letter I with diaeresis
      "ï"   =>   '&#239;',       //latin small letter i with diaeresis
      "Ñ"   =>   '&#209;',       //latin capital letter N with tilde
      "ñ"   =>   '&#241;',       //latin small letter n with tilde
      "Ó"   =>   '&#211;',       //latin capital letter O with acute
      "ó"   =>   '&#243;',       //latin small letter o with acute
      "Ô"   =>   '&#212;',       //latin capital letter O with circumflex
      "ô"   =>   '&#244;',       //latin small letter o with circumflex
      "Å’"   =>   '&#338;',       //latin capital ligature OE
      "Å“"   =>   '&#339;',       //latin small ligature oe (note)
      "Ã’"   =>   '&#210;',       //latin capital letter O with grave
      "ò"   =>   '&#242;',       //latin small letter o with grave
      "Ø"   =>   '&#216;',       //latin capital letter O with stroke = latin capital letter O slash
      "ø"   =>   '&#248;',       //latin small letter o with stroke, = latin small letter o slash
      "Õ"   =>   '&#213;',       //latin capital letter O with tilde
      "õ"   =>   '&#245;',       //latin small letter o with tilde
      "Ö"   =>   '&#214;',       //latin capital letter O with diaeresis
      "ö"   =>   '&#246;',       //latin small letter o with diaeresis
      "Å "   =>   '&#352;',       //latin capital letter S with caron
      "Å¡"   =>   '&#353;',       //latin small letter s with caron
      "ß"   =>   '&#223;',       //latin small letter sharp s = ess-zed
      "Þ"   =>   '&#222;',       //latin capital letter THORN
      "þ"   =>   '&#254;',       //latin small letter thorn
      "Ú"   =>   '&#218;',       //latin capital letter U with acute
      "ú"   =>   '&#250;',       //latin small letter u with acute
      "Û"   =>   '&#219;',       //latin capital letter U with circumflex
      "û"   =>   '&#251;',       //latin small letter u with circumflex
      "Ù"   =>   '&#217;',       //latin capital letter U with grave
      "ù"   =>   '&#249;',       //latin small letter u with grave
      "Ü"   =>   '&#220;',       //latin capital letter U with diaeresis
      "ü"   =>   '&#252;',       //latin small letter u with diaeresis
      "Ý"   =>   '&#221;',       //latin capital letter Y with acute
      "ý"   =>   '&#253;',       //latin small letter y with acute
      "ÿ"   =>   '&#255;',       //latin small letter y with diaeresis
      "Ÿ"   =>   '&#376;',       //latin capital letter Y with diaeresis
      
      • Guillermo
        / Responder

        Entre lo que me has pasado y la función utf8_decode de PHP conseguí que las inserciones en la base de datos fueran en castellano. Muchas gracias 🙂

        • Pedro Ventura
          / Responder

          De todas maneras, a pesar que lo estas metiendo en castellano con utf8_decode() esto no es la forma correcta, es un parche para que funcione, te lo digo porque ya me ha pasado. Tendrías que pasar toda la base de datos a utf8, cuando tengas toda la base de datos en utf8 y transformados los textos, es decir, el contenido de la base de datos y que se vea bien, tendría que quitar todos los utf8_decode() y utf8_encode() del código. Tal cual comento en el artículo. Suerte!!

          • Guillermo

            La base de datos la tengo toda en utf8_spanish_ci
            El problema me venía al importar registros desde un Excel con la clase PHPExcel, me los importaba con los caracteres en iso, con el utf8_encode me los guarda bien.

            ¿En este punto he de cambiar algo? Creía que estaba ya todo terminado, no entendí si tengo que hacer algo más para poder hacer búsquedas posteriormente de esos registros

          • Pedro Ventura

            buenas,

            tienes que tener en cuenta que la base de datos es lo que más problemas ocasiona. Primero ésta tiene que arrancar el utf8, tienes conectarte en utf8, cuando insertas y recoges datos, también tienen que estar en utf8, ya que puedes meter o recoger datos en iso estando la base de datos en utf8. Si la base de datos está en utf8 pero los datos están en iso y luego tienes que usar utf8_encode() y utf8_decode(), ya te dije que funciona pero es un parche, en teoría si todo está bien en utf8 no tendrías que usar esas funciones de php.

            Crees que podrías pasar los datos del Excell a consultas SQL? y luego las ejecutas por consola o desde el phpmyadmin? Eso sin duda te daría más seguridad de que tus datos se insertan en utf8.

          • Guillermo

            Realmente no puedo hacer eso, porque “mi cliente” quiere tener que darle a un botón y que se inserten los registros desde un Excel sin tener que entrar al phpMyAdmin ni nada.

            La base de datos y las tablas las tengo todas en utf8_spanish_ci como te comenté. Sólo me había dado problemas esto de la importación.

            Si acaso en el momento que tenga que realizar las búsquedas quizás tenga que utilizar algún tipo de conversión para que se pueda encontrar a “María” tanto escribéndolo igual, como poniendo “maria”, “maría”, etc.

            Muchas gracias por tu interés.

  64. SKFull
    / Responder

    Hola pedro ha sido muy interesante tu explicación, agradecería si me echaras una mano en algo,estoy haciendo una web y en el principio estaban creada las bases de datos en latin1_spanish_ci y los archivos con sus metas en utf-8 pero empece a terner problemas con tildes, y un raro problema con un libro de visitas en el cual edito los comentarios en otra página para borrarlos por el admin con un comportamiento de DW de eliminación de registro, y no me elimina los nombres de usuarios que tengan tildes los que ni lo tienen si se eliminan sin problemas, cambie a iso-8859-1 y los caracteres se ven bien, la ñ y tildes me los cambia automatico en el codigo fuente al contrario que con utf8 no se pq , pero el problema de eliminar los registros continúa. No se si me he explicado bien, si no me entiendes bien si me lo permites te envio un correo explicandotelo mejor, gracias de antemano

    • Pedro Ventura
      / Responder

      Pues tendrás que comprobar cual es la consulta sql que se está ejecutando a la hora de eliminar registros, ya que tendría que ser algo como DELETE FROM table WHERE id=x y esto no tendría que verse afectado por el tipo de codificación que tengas.

  65. Juan Pablo
    / Responder

    Gracias amigo! Tu post me ayudó mucho. Saludos!

  66. ivan
    / Responder

    Muy currado el articulo y detallado.
    Una pregunta , en el blog que tengo http://bellotabellota.es , la bases de datos tienen los acentos y ñ bien escritas , pero cuando voy a ahacer un analissi seo ,con la herrmienta http://www.seoworkers.com/tools/report.html las palabaras claves que llevan acento me las muestra mal como jamón me muestra jam n o las que tienen ñ .
    Eso es un problema de la herramienta que esta ingles o del wordpress.?
    Gracias,
    un saludo.
    Ivan.

    • Pedro Ventura
      / Responder

      Hola Ivan,

      si está bien en tu base de datos y se ve bien en tu web casi seguro es ese software. Prueba con otras herramientas, por ejemplo las extensiones de firefox de seo quake o foxyseo tool.

      Un saludo!

  67. Carlos
    / Responder

    Excelente post!!

    Nota: A mi me salió un error en la línea: default-character-set=utf8

    pero al cambiarla por:
    -loose-default-character-set=utf8

    el servidor me dejó arrancar correctamente y sí cambió bien los valores.

  68. / Responder

    Muy buena la información.
    Gracias

  69. / Responder

    Sobre el artículo, enhorabuena es muy bueno y me ha ayudado a comprender más los problemas que tengo desde siempre.

    Pero hay puntos del artículo que creo no está bien especificado y que es importante señalar. Os cuento.

    Yo hice el cambio sobre mi servidor, en los ajustes de la base de datos, es decir sobre un servidor que tiene 86 dominios con sus bases de datos. Mi sorpresa fue que, al probar el cambio de configuración, pensé que sólo afectaría a los datos de entrada/salida, y en el caso de que no me funcionara correctamente, quitaría las configuraciones del httpd.conf y todo seguiría como antes no? PUES NO. Una vez aplicados esos cambios sobre el httpd.conf, el servidor cambia todas las bases de datos. Sobre todo las que están en LATIN1 o en UTF-SPANISH, y cambia automáticamente los caracteres que haces referencia que deben cambiar. El problemón que se genera es BRUTAL. Yo he tenido que corregir cada uno de los dominios y bases de datos para poder solucionar o minimizar el cambio de caracteres.

    Si queréis más información de lo que he tenido que hacer para solucionar este problema, os lo cuento por email. Para no aburrir.

    OJO Con hacer pruebas con esas configuraciones que después no hay vuelta atrás.

    • Pedro Ventura
      / Responder

      De todas maneras lo que tu cambies en el httpd.conf no tiene que alterar las bases de datos, porque una cosa el servidor web, Apache, nginX o lo que sea… y otra el servidor de bases de datos. Como la configuración de apache va afectar a cada una de las bases de datos? No tiene sentido, no lo veo…

  70. Vero
    / Responder

    Veo correctamente el sitio a través de Internet Explorer (9), pero cuando quiero enviar la página por e-mail (Página>Enviar página por correo electrónico), llega al destinatario (Hotmail, Fibertel, Gmail), con los caracteres cambiados (es decir, ni un acento ni tampoco ninguna “ñ”), ¿qué me sugieres?
    Gracias!!

  71. Pingback: Contenidos sobre Open Source 14 de Marzo

  72. Carlos
    / Responder

    Buenas tardes Pedro. Tengo una situacion a ver si tu me puedes ayudar. Tengo un formulario donde tengo un Textarea con el plugin para formato enriquecido Tynimce. Todo funciona bien excepto cuando le pongo tilde a una palabra, al guardar el manda a php y a mysql. Cuando reviso lo que guardo veo que me ha guardado todo lo que esta antes del caracter & que es donde inicia el codigo html para la tilde. Me ignora todo el resto del texto adicionado. Me podrias ayudar para saber porque hace esto? Ejemplo: Si escribo: “Ubicación” el me graba en la base de datos “Ubicaci” lo demas lo ignora. De antemano muchas gracias por tu ayuda.

  73. migue
    / Responder

    Efectivamente, a base de tiempo y meteduras de pata, mis sistemas van funcionando en utf-8. el unico problema es que no puedo servir imágenes que tengan eñes, acentos, cedillas, etc. en el nombre del fichero.
    Los navegadores modernos aceptan esos caracteres en la url para direcciones y parametros, pero no para los nombres de ficheros. y si hago un urlencode en el enlace lo pone con urlencode en utf8, con dos bytes.
    Alguna idea????
    Gracias

  74. avpag
    / Responder

    muy bien, lo unico que me dara al traste es que en mi aplicacion de php hay muchas funciones strlower, substr y demas.. mmm.. ya le s platicare como me fue porque efectivamente mi caso es una base que ya esta creada y tiene datos de todo tip0o de charset, bueno no de todo tipo pero…. con 2 o 3 me será suficiente para batallarle un poco.. saludos y excelente guía

  75. / Responder

    Excelente tu guia, estaba buscando algo asi, en la empresa donde laboro usamos postgres y siempre hemos tenido el mismo problema, ademas se pierde mucho tiempo codificando y decodificando. Te aplaudo por este articulo, muchas gracias.

  76. Juan
    / Responder

    Hola.

    Estoy tratando de configurar mysql como UTF sin embargo cuando introduzco las lineas que has puesto, el servicio no se inicia.

  77. Riposin
    / Responder

    Gracias por el aporte, todo en solo articulo…se te agradece y felicita.

  78. Rita
    / Responder

    Hola Pedro,

    Ante todo decir que no soy informática ni nada parecido, más bien una usuaria desesperada. Creo que este el mejor post del mundo mundial sobre lo que vengo a preguntar, ojalá me puedas orientar un poco al respecto.
    Tengo una web: sanacionesencial.com que ayer sufrió una hecatombe. Está hecha con WordPress vía Fantástico deluxe y la tengo alojada en Hostgator (USA), la borré accidentalmente intentando resolver otro problema de otra web que tengo, así que me puse en contacto con el soporte técnico de dicha compañía, les envié el último respaldo de base de datos de que disponía (lo obtengo de un plugin que me envía a mi email los respaldos cada semana) y ellos se encargaron de restablecerla. Todo bien hasta que entro a la web y me encuentro los caracteres extraños de los acentos y ñ.
    Por sugerencia de un participante de un foro, edité el archivo de la plantilla header.php, cambiando esto: que tenía originalmente, por esto otro:
    No se solucionó el problema visual de los posts antiguos, pero hice un post de prueba y veo que los contenidos nuevos si saldrán de modo correcto, por tanto, presupongo que el problema estará en algún otro lado ¿será en la codificación de la base de datos restablecida? ¿y dónde está realmente el problema?
    ¿se puede modificar la base de datos?
    En lo que puedas orientarme, te lo agradezco infinitamente.
    Un saludo,
    Rita

    • Rita
      / Responder

      Perdona que no salió la codificación que cambié:

      Por sugerencia de un participante de un foro, edité el archivo de la plantilla header.php, cambiando esto: que tenía originalmente, por esto otro:

      • Rita
        / Responder

        Bueno, no sale, lo que cambié fue UTF-8 por ISO-8859-1

    • Pedro
      / Responder

      El problema puede venir de dos sitios.

      1) El plugin que usas siempre te ha exportado la base de datos con la codificacion mal
      2) La empresa ha importado todo mal.

      Habría técnicas para sustituir los caracteres mal codificados en base de datos, pero habría que hacerlo por consola linux mediante comandos, con esto claro se haría todo automático y mucho más rápido.
      Pero como me has dicho no eres informática y por lo tanto no sabrás de linux ni comandos imagino que tendrás que entrar en el administrador de artículos e ir editando artículo por artículo hasta que se vean bien. Prueba a modificar 1 a ver si se soluciona sino los tendrás que ir creando desde 0 a partir de lo que tienes.

      • Rita
        / Responder

        Hola Pedro, muchas gracias por contestar.
        Al final he dado con el problema. Efectivamente estaba en el fichero generado por el plugin. Lo he extraído del zip, abierto con el blog de notas y dado “guardar cómo” en formato TXT y codificación UTF-8. Acto seguido lo importé por MyPHPadmin (previo borrado de las tablas anteriores, que no sé si era necesario, pero bueno..) y voilà! web funcionando perfectamente en español.
        Ahora respiro de nuevo….
        Muchas gracias por tu atención!

  79. roy
    / Responder

    muy buen dia, muy bueno el post, tengo una pequeña duda:
    cuando trabajamos con utf-8 en mysql los datos almacenados como es, en el caso de las ñ, á, ? .. o cualquier otro caracter raro.
    yo he creado mis tablas con utf-8, pero en html lo hacia con iso claro usando encode y decode de php para visualisar y guardar, y el almacenamiento era tal cual los caracteres ( ñ, á, ? ). pero ahora quiero usar solametne utf-8, y tuve problemas, los caracteres especiales como ( ñ, á, ? ) no se guardan tal cual lo vemos.. lo hace de esta manera ejemplo: ( en lugar de á – > á ‘, o en lugar de la ñ ->ñ) .. a que se debe este problema.. como le repito anteriormente lo hacia con iso desde html, usando enconde y decode respectivamente, y los caracteres se guardaban tal cual . o tal vez es que ¿se deben guardar de esa forma? osea asi ( á,ñ ); por favor le ruego pueda responder mi pregunta.. mi duda es ¿como se almacena en la base de datos cuando se usa utf-8 , tal cual veemoso asi ( á,ñ )? .. gracias Dios te bendiga

    • Pedro Ventura
      / Responder

      Hola Roy,

      Lo que tu tienes el típico problemas con la codificación. A ver en base de datos se tienen que ver bien, es decir una eñe se tiene que ver ñ y no ñ. Tienes que quitar todos los encode y decode de php, esto ya no lo tienes que usar. Y lo más importante tienes que comprobar que mysql arranque, devuelva y guarde los datos en utf8, todo en utf8. En este artículo y en otro que tengo explico como hacer para que mysql esté todo en utf8.

      En base de datos el contenido se tiene que poder leer, se tiene que almacenar la ñ y no lo otro.

      • roy
        / Responder

        muchas pero muchisimas gracias por responderme y aun mas todavia fue rapido.. ya me aclaraste, y seguir los pasos para configurarlo bien.. Gracias Dios te bendiga.. Saludos

      • Roy
        / Responder

        disculpe la molestia nuevamente, para hacer los ajustes y configuraciones necesariamente hay que contar con servidor propio, que pasa con un hosting normal que podemos adquirir de una determinada empresa, si es posible eso… y por favor mi ultima suplica, por favor podría ayudarme con el appserver en windows, es posible solucionar el problema ahii.. gracias de Ante mano, Dios lo bendiga…

        • Pedro Ventura
          / Responder

          Hola Roy, pues efectivamente, necesitas poder contar con tu propio servidor dedicado o con un VPS donde tu puedas tocar los archivos de configuración de mysql y apache.
          Sobre lo del appserver en windows no se a que te referieres?! Ya me cuentas

          Un saludo!

          • Roy

            Muchas gracias me sirvio de mucho, efectivamente no es necesario usar deconde ni encode, lo que me faltaba era establecer conexión entre MySQL y PHP para ello solamente uso mysql_set_charset(‘utf8’,$link); me faltaba eso , bueno yo tengo instalado el appserver, y tenia problemas y la pregunta era como es la configuracion en eso pero como cuento ya resolvi, muchas gracias Dios te bendiga Pedro , muchas gracias por el post… SAludos

  80. / Responder

    Esto me ayudo terriblemente

    Si se quiere convertir, por ejemplo á por á y todas las demás, con esta simple función ya vale. Su funcionamiento:

    1. Convierte TODOS los caracteres especiales a entidades.

    2. Como los caracteres no nos interesa que queden codificados, se vuelven a descodificar (sólo estos).

    descargar

    function caracteres_html($texto){
    $texto = htmlentities($texto, ENT_NOQUOTES, ‘UTF-8’); // Convertir caracteres especiales a entidades
    $texto = htmlspecialchars_decode($texto, ENT_NOQUOTES); // Dejar como estaban
    return $texto;

  81. Pingback: Espacio linux » Blog Archive » nuevo

  82. Pingback: Blog WidPlay » Ahorra en servidores: Aventura como SysAdmin

  83. / Responder

    muy bueno el post, muchas gracias…

  84. emma
    / Responder

    Pregunta yo tengo este inconveniente, tengo, utf-8 en la base de datos, utf-8 en la vista en el html y es como que hace un utf-8 sobre otro y quedan caracteres raros? algun consejo?

  85. Carlos
    / Responder

    Gran post!!!
    Muchas gracias !!!

  86. Jorge Carlos
    / Responder

    Me pareció increíble tu artículo y me salvaste de varias horas de estar haciendo ajustes de aquí para allá.

  87. / Responder

    Uff, me has salvado! después de rayarme muchísimo con qué estaba pasando con los caracteres en una nueva web que estoy preparando, al final todo se ha arreglado añadiendo una línea al my.ini de MySQL…

    MIL GRACIAS

  88. mauricio
    / Responder

    hola soy muy….novato en esto y no he podido configura la bd mysql en el localhost ya que sale un erro rarisimo “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘TYPE=MyISAM CHARACTER SET `utf8`’ at line 29 SQL=CREATE TABLE `jos_banner` ( `bid` int(11) NOT NULL auto_increment, `cid` int(11) NOT NULL default ‘0’, `type` varchar(30) NOT NULL default ‘banner’, `name` varchar(255) NOT NULL default ”, `alias` varchar(255) NOT NULL default ”, `imptotal` int(11) NOT NULL default ‘0’, `impmade` int(11) NOT NULL default ‘0’, `clicks` int(11) NOT NULL default ‘0’, `imageurl` varchar(100) NOT NULL default ”, `clickurl` varchar(200) NOT NULL default ”, `date` datetime default NULL, `showBanner` tinyint(1) NOT NULL default ‘0’, `checked_out` tinyint(1) NOT NULL default ‘0’, `checked_out_time` datetime NOT NULL default ‘0000-00-00 00:00:00’, `editor` varchar(50) default NULL, `custombannercode` text, `catid` INTEGER UNSIGNED NOT NULL DEFAULT 0, `description` TEXT NOT NULL DEFAULT ”, `sticky` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, `ordering` INTEGER NOT NULL DEFAULT 0, `publish_up` datetime NOT NULL default ‘0000-00-00 00:00:00’, `publish_down` datetime NOT NULL default ‘0000-00-00 00:00:00’, `tags` TEXT NOT NULL DEFAULT ”, `params` TEXT NOT NULL DEFAULT ”, PRIMARY KEY (`bid`), KEY `viewbanner` (`showBanner`), INDEX `idx_banner_catid`(`catid`) ) TYPE=MyISAM CHARACTER SET `utf8`” que debo hacer ??? que pena lo especifico !!!

    • Pedro Ventura
      / Responder

      Buenas,

      Pues la consulta está bien pero por lo que he visto sobran las ultimas comillas dobles que pones.

      De hecho te he copiado la consulta y la he ejecutado y me ha funcionado quitando esas últimas comillas dobles, mira esta captura de pantalla que he hecho, como verás se ha creado la tabla en la base de datos http://www.pedroventura.com/wp-content/uploads/2011/11/instantanea27.png

  89. / Responder

    Excelente artículo, el más completo de la web. Muchas gracias y felicitaciones.

  90. paco rosado
    / Responder

    Sólo quiero comentar y reconocer un buen trabajo. he seguido cada paso y todo está bien. fabuloso

    Saludos

  91. JWZIZ
    / Responder

    Excelente!!!
    muchas gracias por compartir tus conocimientos (y)

  92. El Alejo
    / Responder

    Excelente guia la que expones para este problema de los caracteres que es el tormento de todo desarrollador web

  93. Leandro
    / Responder

    Muchísimas gracias. Hice todo al pie de la letra y se arreglaron los problemas que me vienen causando dolor de cabeza hace rato.

    Ahora me estoy peleando con getJSON, pero ese es otro tema.

    Gracias!

  94. Mauricio
    / Responder

    Pedro, gran articulo, pero sigo con problemas, resulta que si el usuario crea contenido desde firefox, la ñ y las tildes quedan mal pero desde otros navegadores SI queda bien, que puede ser?

    • Pedro Ventura
      / Responder

      Buenas Mauricio,

      La codificacion del navegador tambien se puede configurar.
      En firefox es: Ver -> Codificación de caracteres -> Unicode (UTF-8) prueba que esté así. Si toda tu app está en utf8 posiblemente el error este en el usuario pero aun así tienes que revisar todo.

      Mira eso de firefox… Tambien prueba a eliminar toda la cache de firefox, las preferencias del sitio, todo! porque firefox cachea muchas “cosas” que luego dan problemas.

      Ya me cuentas

      un saludo!

      • / Responder

        No sé si será de ayuda, pero el problema con firefox igual se soluciona asegurando que el usuario está escribiendo en utf8, para lo cual habría que añadir al form el atributo accept-charset=”UTF-8″…

  95. Hipanu
    / Responder

    Hola Pedro,
    me parece interesante tu articulo aunque no me haya solucionado del todo mi problema.
    Te explico yo lo que quiero es poder utilizar utf-8 sin tener que agustar el servidor ya el resto de webs estan en otro juego de carecteres.
    Me estoy peleando con ello a ver si de alguna forma consigo que el texto de las paginas se visualize bien.
    Este tema se me escapa un poco pero espero solucionarlo.
    Saludos!

  96. Pedro Ventura
    / Responder

    A parte del header para que genere el pdf prueba a meter también el charset de utf8,

    así: header(‘Content-type: application/pdf’; charset=utf-8′);

  97. Damian
    / Responder

    Hola, muy interesante tu explicacion, pero mi problema tambien abarca la exportacion a pdf, cuando escribo una “ñ”, aparece en el documento pdf “ñ”. Ya configure apache, php y mysql como vos dijiste, pero el pdf sigue sin funcionar…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¡Comparte este artículo! »

Sígueme en Facebook »

  • Adrian (2 semanas)
    Desde que añades los dns cuanto tiempo, se tarda hasta…
  • elmer rodriguez (3 semanas)
    hola tengo un problea con ckeditor es que, no optiene…
  • Sergio (2 meses)
    Expongo mi problema: He creado un videojuego en RV para…
  • diseño web (2 meses)
    Gracias por el post, me tenia loco el tema de…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

profile for Pedro Ventura on Stack Exchange, a network of free, community-driven Q&A sites
Leer entrada anterior
Herramientas de control y seguimiento de errores. Bug tracking

Para gestionar un proyecto no es tan importante conocer el código que funciona bien, que está perfecto, el código que...

Cerrar