Error con acentos y eÑes en PHP/MySQL (Solucionado)
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 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
- Al crear la base de datos MySQL, asegúrate que los campos string y demás esten en
utf8_spanish_ciy el cotejamiento de las tablas en
utf_unicode_ci(más tarde en Operations > Collation de phpMyAdmin se puede cambiar) - Pon en el
<head>de todos los archivos HTML:<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
- Y en los puramente PHP (que muestran XML, llamadas de AJAX, APIs…) pon el código:
header("Content-Type: text/html;charset=utf-8"); - 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) - Quita el
DefaultCharsetdel Apache o modifícalo - Como última y desesperada opción, quita todos los
htmlentities();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, 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 de O’Reilly (enlace a la edición de tapa blanda que es más barata) ya que es muy completo y te ayudará a entender todos los problemas de charsets y demás obstáculos a los que te enfrentarás en el futuro.
Fotografía por Eduardo
Living in United Kingdom? Read about the best mobile phone network in the UK.
Personal MBA
Get out while you can
And death came third
Universal Principles in Design
Comments
177 comments to Error con acentos y eÑes en PHP/MySQL (Solucionado)
Hermano muchas gracias!!
El paso 4 fue el que me sirvió.
Excelente, felicidades por este miniresumen!
June 2nd, 2009 at 6:07 amMuchas gracias funciono perfecto, he intentado muchas formas y esta es la única que simplemente me salvó.
Un saludo y gracias de nuevo.
June 12th, 2009 at 8:49 pmMuchisimas gracias, me sirvio muchisimo!
June 21st, 2009 at 5:33 amEres un makina tronko :P… ¡yo de mayor quiero ser luckyshot!
ciao pescao
June 22nd, 2009 at 12:05 amTio, tenía ese mismo problema y he estado unas cuantas horas buscando en internet. Muchos comentarios al respecto pero pocas soluciones, hasta que San Google me ha llevado aquí. No suelo dejar comentarios, pero esto lo merece: Muchas gracias!!
July 12th, 2009 at 1:26 amExcelente, muy buena ayuda a la comunidad de desarrolladores…
Muchas Gracias.
July 23rd, 2009 at 12:16 amSii, de verdad muy buena ayuda, yo también estuve buscando una solución para mi problema durante horas y pos ya la encontré.
Muchas gracias!!!
August 12th, 2009 at 5:51 pmHola! Por casualidad del destino encontré este blog! y plop! el paso 4 me fue de maravilla! muchas gracias!
August 13th, 2009 at 5:52 amEstoy comenzando a construir la página y tu ayuda fue muy importante.
September 1st, 2009 at 6:28 pmMuchas gracias.
El paso 4, siempre se me olvida, gracias por hacerme memoria.
September 6th, 2009 at 10:02 pmNo conocia el paso 4 y ha funcionado! Muchas gracias
September 15th, 2009 at 6:38 pmExcelente, llevo tiempo buscando una solución, y las que encontraba eran muy confusas y habia que cambiar muchas cosas, y con solo insertar el paso 4 resultó. Un millón de gracias.
September 17th, 2009 at 5:40 amme encantaria saber a que te refieres con el punto 5…
Quitar todos los htmlentities….
te refieres a eliminar las funciones de nuestros codigos PHP o a aplicar esta función ???
September 18th, 2009 at 10:54 pmHola peloon,
Me refiero a que si usas el htmlentities() para intentar solucionar el problema, ya no hará falta si sigues los demás puntos. Así que quítalos y cuentas si te funcionó.
Saludos
September 18th, 2009 at 11:09 pmBAH!, y si usas netbeans en linux usando todo en orden con utf-8 y lo pasas a windows y pones un javascript con una expresion regular que lleva eñes obligatoriamente, estas en un infierno…
October 15th, 2009 at 10:28 pmMuchiiisimas gracias.
November 19th, 2009 at 6:51 pmMuy buen aporte y muy bien explicado. !!!!!!
Vaya que muy buena ayuda la que me has dado amigo, ya esta por pensar que tendría que hacer todo de nuevo xD muchisimas gracias por la nota que me vino de perlas, saludos :D
December 5th, 2009 at 11:36 pmMuchas gracias, voy a linkear a este blog :D Gracias
January 17th, 2010 at 1:39 amMe has salvado la vida! 4 horas buscando la solución.
February 5th, 2010 at 9:18 pmperfecto y mas que eso excelente al final me estaba dando porvencido pero analizandolo bien me di cuenta que hay que realizar los 6 pasos ya que el comportamiento es diferente en distintos Servidores y esto me llevo a entender que es una solucion general para la mayoria de rosoluciones del lado del servidor, navegador y cliente web.. gracias…
February 8th, 2010 at 5:58 pmMuchas gracias por esta solución. Estuve varias horas probando con muchas alternativas que aparecen en la web y nada me resultaba.
February 8th, 2010 at 7:57 pmSaludos
Mil gracias compadre… estuve toda la tarde de ayer y la mañana de hoy hasta que encontre tu post bien explicadito.
February 10th, 2010 at 2:20 pmsaludos
GENIO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! El unico que me dio la solución….
+10 si hubise puntos
February 22nd, 2010 at 5:37 amDespues de darle mil vueltas por fin lo soluciono! me faltaba el mysql_query(“SET NAMES ‘utf8′”);
Muchas gracias!
February 22nd, 2010 at 9:20 pmjuas quitar –>htmlentities() para solucionar acentos eso si que es ser suicida, pues terminaras con acentos pero con terrible xss en tu web…
February 23rd, 2010 at 11:14 pmsaludos!
Te puedo decir que en un servidor deje los htmlentities() y funciona de maravilla, sin embargo en otro servidor tuve que quitarlos, mi recomendación es dejarlos en la medida de lo posible.
March 3rd, 2010 at 2:27 amde lujo gracias amigo todo funciona a la perfeccion en cualquire sitio si no hago todo funciona en algunos pero si aplico todo en todos mis sitio funciona
March 10th, 2010 at 4:57 pmgenial…. el paso 4 igual solucionó mi problem. saludos
March 10th, 2010 at 6:31 pmMuy interesante por cierto.
March 12th, 2010 at 3:37 pmMuchas gracias ;)
Excelente! A punto de soltar llanto por frustración, encuentro la solución en tu página y problema resuelto!!! =)
March 24th, 2010 at 6:41 amAparte de agradecerte, quiero agradecerte =D jeje
Bueno, saludos y muchas GRACIAS
Muchas gracias el paso 4. Y lo mismo de todos los demás tras tragar mucha mierda por google alguien que da soluciones… Muchas gracias
March 26th, 2010 at 2:35 amestuve buscando todas las vacaciones
esta respuesta. te pasaste, ademas ke
estan super claros los pasos.
Saludos muchas gracias loko
April 1st, 2010 at 8:09 amHola Xavi, me solucionaste el problema haciendo la consulta de SET NAMES.
Si alguien usa msqli como yo la linea es:
$acentos = $db->query(“SET NAMES ‘utf8′”);
Muchas gracias.
April 5th, 2010 at 8:24 pm[...] vía Error con acentos y eÑes en PHP/MySQL [Solución Definitiva] by XaviEsteve. [...]
April 21st, 2010 at 4:19 pmBuenas tardes mi problema es a la hora de insertar un correo, me quita el @ y me pone %40 y no me deja realizar la inserción… No se que hacer estoy desesperado ya q es mi trabajo de grado, lo peor es q en windows me funciona perfecto y en linux se caga todo.
April 23rd, 2010 at 8:37 pmHola Kendall, eso te pasa al enviar formularios? Parece que la @ se convierte a %40 antes de llegar a insertarse en la base de datos. Cuelga un enlace a la web o un ejemplo y lo miramos.
April 25th, 2010 at 9:14 pmGracias tío,
April 26th, 2010 at 6:10 pmmysql_query(“SET NAMES ‘utf8′”);
Gracias compadre, funcionó de maravilla. Te debo una!
May 7th, 2010 at 4:59 pmTe idolatro tio. Eres un genio. De golpe has hecho que todos mis problemas se resuelvan. Si por lo que sea quieres poner algo en mi web http://planeatuboda.net estás invitado.
May 20th, 2010 at 1:53 pmGracias de nuevo,
Eres grande, la 4ta solución fue la que me sirvio. Gracias!
May 27th, 2010 at 4:37 amTengo Problema tengo en la cotejamiento de la base de datos es utf8_unicode_ci y la tabla tambien y el campo es utf8_spanish_ci y en el archivo php esta desactivada el default_chaset espero que me puedas ayudar
function fAgregarRegistro($vIdProfesor,$vTipo,$vCarrera,$vCatedra,$vUsuario,$vClave){
include_once(‘db/class.conexion.php’);
$vSql=sprintf(“INSERT INTO tblusuarios (idprofesor,idtipo,idcarrera,catedra,usuario,clave,activo) VALUES(%s,%s,%s,%s,%s,%s,%s)”, GetSQLValueString($vIdProfesor, “int”),
GetSQLValueString($vTipo, “int”),
GetSQLValueString($vCarrera, “text”),
GetSQLValueString($vCatedra, “text”),
GetSQLValueString($vUsuario, “text”),
GetSQLValueString($vClave, “text”),
GetSQLValueString(1, “int”)
);
fConexionDB($vSevidor=fVServidor(),$vUsuario=fVUsuario(), $vClave=fVClave(), $vBaseDato=fVBaseDato());
mysql_query(“SET NAMES ‘utf8′”);
$vQuery = fConsultaDB($vSql);
}
May 28th, 2010 at 12:01 am@Alejandro garcia: cual es el problema? has probado a seguir todos los pasos descritos arriba?
May 28th, 2010 at 10:28 amya los hice en el pero no me funciona y no se porque tengo todo según los paso que esta el parte superior
May 28th, 2010 at 3:33 pmAmigo: Estoy incursionando en todo este mundillo del desarrollo web, una frustación muy grande fué que al lograr grabar en mysql los acentos y eñes se veían algo raro .. jaja :D en fin.. me has salvado !! Gracias !!
May 31st, 2010 at 7:01 pmA Propósito, fuí probando todo, cambiando los collage a UTF_espaoll_ci y nada .. que nada. Entonces Apliqué en mi form de entrada el PASO 4 y aloja !! mysql_query(“SET NAMES ‘utf8′”); es la solución DEFINITIVA. GRACIAS NUEVAMENTE !!!
May 31st, 2010 at 7:03 pmHola, no sabia muy bien lo que hacia, solo segui los pasos lo mejor posible, y listo!!…..grata fue mi sorpresa, porque funciona y funciona muuy bien.
imposible quedarse sin comentar y si agradecer.
June 18th, 2010 at 12:24 amsaludos..
[...] http://xaviesteve.com/acentos-y-enes-aparecen-mal-a%C2%B1-en-php-con-mysql-utf-8-iso-8859-1/ [...]
June 21st, 2010 at 12:07 amMi caso es un poco diferente y veo que aqui todos estan felices de haber resuelto el problema, la base de datos fue creada usando latin1_swedish_ci y uso un script, (ADP), que fue actualizado a utf_unicode_ci, el problema es que los primeros 3,000 registros se ven con signos y resuelvo el problema usando un encabezado (ISO-8859-1) pero sigo entrando cada registro quitandole los acentos y no usando la ñ, como puedo convertir la DB completa a Unicode UTF-8 ?
June 23rd, 2010 at 1:43 pmMi caso es diferente y tengo un gran problema, ya me quite de las molestias de los acentos, se ven y todo marcha bien, pero aún así necesito quitar lo acentos de una cadena de texto.
Esta cadena de texto viene de un formulario de registro de usuarios que hice previamente, si yo hago echo $nombre; el nombre sale con todo y sus acentos, pero, recordemos que quiero quitar los acéntos, encontre una función en internet:
function elimina_acentos($cadena){
$tofind = “ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ”;
$replac = “AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn”;
return(strtr($cadena,$tofind,$replac));
}
echo elimina_acentos($cadena);
pero si ejecuto la función, me muestra algo como esto:
July 23rd, 2010 at 8:43 pmsi pongo Gómez, obtengo como resultado gnimez
¿qué puedo hacer?
Hola Alejandro,
El problema con tu codigo es que estas pasando todas las letras como una palabra entera. Tienes que pasarlas como una matriz:
function elimina_acentos($cadena){
$tofind = array(‘à’,'á’,'â’,'ã’,'ä’, ‘ç’, ‘è’,'é’,'ê’,'ë’, ‘ì’,'í’,'î’,'ï’, ‘ñ’, ‘ò’,'ó’,'ô’,'õ’,'ö’, ‘ù’,'ú’,'û’,'ü’, ‘ý’,'ÿ’, ‘À’,'Á’,'Â’,'Ã’,'Ä’, ‘Ç’, ‘È’,'É’,'Ê’,'Ë’, ‘Ì’,'Í’,'Î’,'Ï’, ‘Ñ’, ‘Ò’,'Ó’,'Ô’,'Õ’,'Ö’, ‘Ù’,'Ú’,'Û’,'Ü’, ‘Ý’);
$replac = array(‘a’,'a’,'a’,'a’,'a’, ‘c’, ‘e’,'e’,'e’,'e’, ‘i’,'i’,'i’,'i’, ‘n’, ‘o’,'o’,'o’,'o’,'o’, ‘u’,'u’,'u’,'u’, ‘y’,'y’, ‘A’,'A’,'A’,'A’,'A’, ‘C’, ‘E’,'E’,'E’,'E’, ‘I’,'I’,'I’,'I’, ‘N’, ‘O’,'O’,'O’,'O’,'O’, ‘U’,'U’,'U’,'U’, ‘Y’);
return(strtr($cadena,$tofind,$replac));
}
Creo que falta la eñe minuscula y quizas alguna letra mas pero haciendo unos arreglillos te deberia funcionar :)
Un saludo,
July 23rd, 2010 at 8:51 pmXavi
En mi caso el problema era simplemente el mysql_query(“SET NAMES ‘utf8′”)
Gracias.
July 26th, 2010 at 8:59 amNose como agradecerte !!!!!!!!!! jajajaja saludos
August 1st, 2010 at 6:49 amel 4 pso me ayudo y gracias.
August 6th, 2010 at 10:49 pmHola amigo un millon de gracias!!!!!! la verdad ahora me guarda los acentos en la BD sin rollo alguno, MAS FINO!el problema es q ahora cuando quiero mostrar los datos de la BD en una lista desplegable por ejemplo de clientes , estos me salen con un simbolo raro donde van los acentos, que crees que pueda ser’? si puedes porfa Resp te lo agradeceria.!1
August 19th, 2010 at 7:24 pmYa tenía realizado los primeros pasos, me faltaba lo último al parecer, pero… el problema persiste, se que es apache el del problema porque faltan acentos en los datos estáticos que hay en mis archivos .php y lo que se carga de la base de datos está perfecto, en fin, busqué por todos lados dentro de apache y no encontré AddDefaultCharset, por lo que lo seteé abajo de mi httpd.conf, reinicié apache y el problema persiste. Estoy en una face “alpha beta” aún en mi proyecto lo cual no utilizo htmlentities() ni nada por el éstilo, podrás acercarme una ayuda?
August 24th, 2010 at 2:09 pmExcelente! Hace una semana que estaba intentando solucionar este problema. Agregué la consulta SET NAMES ‘UTF8′ y… santo remedio! Muchas gracias.
September 4th, 2010 at 7:13 pmAgradezco tu manual, tenia el mismo problema y lo solucione con el paso 4, pero al enviar un formulario con la letra ç me la devuelve como %C3%A7 y no me la encuentra en la base de datos como podria solucionarlo
September 20th, 2010 at 5:51 pmgrande maestro estuve días probado estupideces hasta que lo encontré a usted
September 30th, 2010 at 5:47 amApliqué los 4 pasos para no fallarle. Me funcionó perfecto.
October 14th, 2010 at 6:49 pmMuchas gracias. Excelente Resumen
Para los que tengais problemas importando bases de datos o tablas con el hosting de 1and1 probad lo siguiente:
October 19th, 2010 at 1:10 am- Subid la base de datos a un servidor con una version mas reciente de phpMyAdmin (puede ser vuestro servidor local)
- Exportad la base de datos
- Sin abrir el archivo .SQL con ningun programa, importadla en el phpMyAdmin de 1and1
Excelente tuto amigo, ya resolví el problema que tenía con ñ’s y acentos. En resumen apliqué tres pasos:
1.- Generé los scripts para la recreación de mis tablas y los modifiqué para que quedaran de la siguiente forma:
CREATE TABLE `xqd_accesos` (
`xqd_acceso` varchar(20) NOT NULL,
`xqd_fecha` date NOT NULL,
`xqd_hora` time NOT NULL,
`xqd_entidad` int(8) NOT NULL,
`xqd_usuario` varchar(32) NOT NULL,
PRIMARY KEY (`xqd_acceso`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
Con esto los campos varchar y char, al ser recreados mediante el script heredaron las propiedades de la tabla.
2.- Agregué la línea a la que haces mención en todas las páginas de mi sitio, en el header.
3.- En la función que hace la conexión a la base de datos, después de hacerla, ejecuté el script que mencionas y voilá, furuló.
Gracias por el dato…
October 19th, 2010 at 7:54 pmMuchas gracias por el articulo, me fue muy util
October 26th, 2010 at 11:52 amMil pero mil gracias! Me estaba volviendo loca y ahora me muestra y guarda bien los acentos :)
November 10th, 2010 at 3:04 pmMuchas gracias teníamos casi un día completo buscando la solución, el paso 4 fue el que nos resolvió el problema.
November 13th, 2010 at 2:18 amGracias y FELICIDADES por la aportación.
Muchas gracias!!!
Como a otros usuarios, el paso que me ha servido es el 4.
; )
December 12th, 2010 at 5:23 pmMuchas gracias, al igual que los otros usuarios tenia bastante rato buscando la solucion con una consulta mysql en php, la cual no me mostraba los acentos ni la ñ, ahora con la solucion 4 me funciona perfecto, ya estaba buscando los archivos de apache para meter la picota jajaja, gracias.
December 15th, 2010 at 2:18 amThanksssssssss…!!! Good Post…!!! Great Solutions…!!!
December 15th, 2010 at 2:31 amEncontré ese problema de codificación, en unas consultas elementales displayadas sobre el navegador, la ausencia de acentos(como si los hubiera filtrado, sin embargo en PHPMyAdmin se ve bién), lo extraño es que algunas la consulta salió bién. A raíz que copié (para restaurar) los archivos de una base de datos de otro sistema Wamp a uno llamado Xamp donde seguro son distintas codificaciones, no he visto aún este detalle pero agradezco tu resumén y los demàs aportes, se que me servirán para corregir este error.
December 16th, 2010 at 11:16 pmHola Xavi y demas:
Tengo bastante ratos con el problemilla de los acentos y lod ejaba para lo último, hacia todo el sistema de páginas y al último atacaba ese problemilla con diversos consejos de cuates y de búsquedas en google, a veces resultaban y a veces nop. Emplee el SETLOCALE() y nada
Hoy encontre una solución sencilla que al menos para la página que estoy haciendo a funcionado bien.
Mi bases de datos, todos los campos y la tabla las tengo en utf8_spanish_ci o utf8_unicode_ci o utf8_general_ci y con mi búsqueda de hoy he encontrado que en todas las páginas que tienen consulta a la BD en la linea:
cambiar el CHARSET
January 3rd, 2011 at 9:12 pmcharset=utf-8 por charset=iso-8859-1
January 3rd, 2011 at 9:13 pmLlevo todo el fin de semana dándole vueltas… me he salvado gracias a este blog.
January 30th, 2011 at 10:57 pmBuena info, saludos!
February 9th, 2011 at 10:02 pmMil gracias tío.
February 13th, 2011 at 9:59 amLlevaba toda la mañana con esta tontería.
Por fin lo he solucionado gracias a tus consejos.
Amigo tengo un problema cuand muestro los datos en pantalla no tengo problemas con los acentos pero a la hora de mostrarlo en un reporte los cuales genero con FPDF ya comienzan los problemas me lo muestra con áóñ ya intente seguir tus paso pero nada que sera q habra de diferente espero q me puedas ayudar
February 13th, 2011 at 6:54 pmMuchas gracias.. muy valiosa la información.
February 15th, 2011 at 3:24 pmHello:
Todavia no logro solucionar mi problema, te agradeceria tu ayuda, intente lo que dijiste, despues introduje manualmente los acentos y ñ’s en la base de datos, cuando abro mi pagina en php, se ven los acentos y ñ’s, el problema es cuando cargo un combobox de la base de datos, en ese combobox, no muestra los acentos,alguna sugerencia? sabes que estoy haciendo mal?
February 21st, 2011 at 5:04 pmHola Eloi, cual es la URL de la pagina que da problemas?
February 21st, 2011 at 5:12 pm1 1
February 21st, 2011 at 5:50 pmmysql_query(“SET NAMES ‘utf8′”);
Esta instrucción es la definitiva, el paso 4 me ha salvado, muchas gracias!!!!!
February 23rd, 2011 at 1:31 pmEl paso 4, bailo de alegria, jejeje! Muy buena onda, gracias
February 25th, 2011 at 5:45 amPara los quieran trabajar y guardar los datos en iso-8859-1. Tened en cuenta que las llamadas en post en JQuery, siempre codifican los datos de formulario en la peticion en utf-8. Asi que si antes de insertar en la BD, en vuestros script php de servidor, utilizais la función utf8_decode () os convertirá los datos de formulario codificados de utf-8 a iso-8859-1. me han dado quebraderos de cabeza hasta encontrar la solución..
March 12th, 2011 at 11:21 amMuchísimas gracias, me acabas de ahorrar horas de trabajo gracias a la línea:
mysql_query(“SET NAMES ‘utf8′”);
Eres grande.
March 27th, 2011 at 8:17 pmgracias por tomarte el trabajo de hacer esa compilación, me ayudaste, solucioné el problema con los acentos :)
March 28th, 2011 at 12:50 amFijate que solo con el paso 4 (y en mi caso el 6 porque no tenía la solución) me solucionó el problema.
Pero a partir de ahora todas mis bases de datos las crearé como dices en el paso 1
March 29th, 2011 at 8:15 pmHola Benji,
Tienes razon, el paso 4 es el que soluciona los problemas, los pasos 1 a 3 estan ahi para que ya de paso tambien se implementen y en un futuro ahorren otro tipo de problemas que suelen aparecer :)
March 29th, 2011 at 8:35 pmHola,
Muchas gracias por el aporte! Me solucionó el problema!
March 31st, 2011 at 3:36 pmNo tienes idea de a cuantos “chamanes” consulte. La verdad es que otro poco y mis usuarios deciden olvidarse de los acentos y… entre mi jefe y la Real Academia seguro harian un gran festin!
Gracias!
April 5th, 2011 at 4:21 amMuchísimas gracias!! es lo que buscaba.
April 14th, 2011 at 5:24 pmesta es la real solución del problema gracias!!!!!
April 20th, 2011 at 3:29 pmMuy buen aporte… muy buen resumen…
A mi me funcionó el item 4
Gracias
April 24th, 2011 at 3:20 amexcelente!!!! muchas grcias T_T llevo mxo tiempo tratando de arregla sto
May 1st, 2011 at 5:37 pmHola, estoy haciendo un sistema en php y mysql. Inicialmente los acentos de los datos traidos desde la BD se veian sin problema, luego empezaron a aparecer unos cuadritos negros en los select y cuadros en el resto de las variables. Trabajo con MVC y PDO, se soluciono con el paso 4 todo bien hasta que probe una parte de mi sistema que lee archivos .cvs y cuando se conseguia un acento en algun campo del archivo me da SQLSTATE[HY000]: General error: 1366 Incorrect string value: ‘\xEDa Ale…’ for column ‘NOMBRES’ at row 1
May 2nd, 2011 at 1:24 pmme he pasado horas en esta tonterita… Gracias!!!
May 2nd, 2011 at 11:10 pma qui hay otra solución que a mi me funciono. Lo unico que hice fue agregar esta linea al inicio de mi pagina .php:
May 3rd, 2011 at 4:57 amheader(‘Content-Type: text/html; charset=iso-8859-1′);
me sirvio el paso 4 ! gracias
May 3rd, 2011 at 6:09 pmVarios días buscando, un programa que se encargaba de leer los campos de una base de datos para traducir á por á y después de todo, encuentro esta página.
El único problema que le veo es haber tardado tanto en encontrarla.
mysql_query(“SET NAMES ‘utf8′”);
Una frase muy sencilla que arregla muchos problemas.
May 4th, 2011 at 9:01 amNo puedo más que darte las gracias, una y mil veces, llevo buscando y buscando y buscando, exportando la base de datos entera y volviendola a importar con distintos collation, la opción de encode y utf8_encode() y utf8_decode() no la podía usar porque pasaba por las mismas funciones unas veces con ajax y otras submitiendo formularios y a veces codificaba a utf8 texto que ya estaba en utf8 y al revés dando un resultado no deseado y la solución ahí estaba, con una simple línea en un único archivo a la hora de hacer la conexión, el paso 4 bendito sea!!! ya puedo seguir desarrollando la web porque me daba miedo seguir haciendolo con la mosca detrás de la oreja de que tendría que cambiar en algún momento toooodas las querys, pero mysql_query(“SET NAMES ‘utf8′”); me ha salvado. Muchísimas gracias.
May 26th, 2011 at 11:09 amHola Dukanista,
May 26th, 2011 at 11:27 amMe alegro que te haya servido! En su dia tambien me pase unas cuantas horas (si no dias) desesperado para encontrar la solucion…
Ayuda a difundir la palabra compartiendo este articulo a tus amigos y otros programadores via Twitter, Facebook, foros, etc. Te lo agradeceran!
Esto también sirve para trabajar con el catalán? (Trabajo con el catalán y el castellano.) He probado solo el paso 4 y no funciona. Lo pregunto porque si realizar todos los pasos sirve tendria que crear nuevamente la base de datos desde cero.
June 3rd, 2011 at 12:02 pmHola MarBcn,
June 3rd, 2011 at 12:49 pmSirve para catalan y todos los idiomas que tienen acentos.
No creo que tengas que crear la BD desde cero otra vez, comprueba que en la BD se vea bien (con phpMyAdmin u otro cliente MySQL) y si ahi esta bien entonces solo ves siguiendo los pasos uno por uno hasta que te funcione todo.
Por favor podrian poner pedazos de codigo ó detallar como insertados esos codigos que usted emnciona en la pagina, son novato y no se como hacerlo gracias.
June 15th, 2011 at 4:17 pmHola Miguel,
Si no sabes donde se tienen que poner cada codigo te aconsejo que antes de corregir los errores de acentos, estudies un poco mas de HTML, PHP, MySQL, Apache y htaccess.
Una vez tengas clara la gramatica de cada lenguaje entenderas las instrucciones de este articulo mucho mejor ya que son muy sencillas. Animos y suerte :)
June 15th, 2011 at 4:24 pmGracias por el Tip, solo que te Falta mas explicacion
June 25th, 2011 at 3:07 amo ejemplos
Ejemplo:
El punto 4 funcionó para mi. Gracias!
June 28th, 2011 at 10:02 pmEl 4to paso me salo la vida . Sos un groso. Una pegunta como hiciste el fondo de tu web. Saludos.
June 30th, 2011 at 11:44 pmExcelente solución. Tengo una librería con el mysql_connect y puse el mysql_query(“SET NAMES ‘utf8′”); justo en la siguiente línea. Funciona perfecto. Gracias!
July 7th, 2011 at 5:07 pmMi amigo, muchisimas gracias, ya me estaba doliendo la cabeza con esto. pero gracias a tu articulo me ayudaste mucho.
de nuevo muchaaaaaaaaaaaaas gracias
July 8th, 2011 at 10:14 pmCapo!!
Aqui estaba el tema: mysql_query(“SET NAMES ‘utf8′”);
July 13th, 2011 at 9:00 pmMuuuuuchas gracias… el cuarto paso es el verdadero, porque intente todo de verdad gracias Dios te Bendiga…
July 15th, 2011 at 3:28 amGracias Xavi,
he podido solucionar la entrada de datos a la DB pero todavía me devuelve caracteres extraños.
July 26th, 2011 at 12:06 pmeres grande, estuve probando soluciones dadas en otros sitios (como 2 horas) hasta que llegue a tu pagina..de los mas sencillo. Son detallitos que se le pasan a uno cuando recien inicias en estos menesteres.
gracias. saludos.
August 4th, 2011 at 12:50 amMuchas gracias, resolviste un dolor de cabeza de una forma sencillísima :)
August 12th, 2011 at 2:30 pmHola, muy bueno el articulo, pero tengo una duda tal vez tonta, pero es que en el cotejamiento de tablas no encuentro la opcion utf_unicode_ci
Me sale es utf8_unicode_ci, utf16_unicode_ci y utf32_unicode_ci
Tengo la version phpadmin 3.3.9
Cual elijo de esas, si no sale la que mencionas?
Gracias.
August 12th, 2011 at 11:28 pmMe has salvado la vida! Gracias! Bendiciones!
August 12th, 2011 at 11:37 pmMil gracias, mucha gente dice tener la solución pero nada.. finalmente aquí encontré la solución,
Gracias.
August 16th, 2011 at 9:19 amMil gracias me has solucionado el problema que arrastraba desde hace mucho tiempo. El paso 4 ha sido clave.
August 17th, 2011 at 3:43 pmMuchas gracias por tu aclaración.Internet explorer era el que daba problemas. Con Mozilla se visualizaba bien. De repente en la página desaparecieron los acentos y las ñ, y como no se html no sabía como solucionarlo, y así llevaba meses, cuando hoy encontré tus instrucciones… En 2 minutos problema solucionado.Con el paso 2 fue suficiente. Nuevamente gracias
August 25th, 2011 at 12:20 amel paso 4 es el que me sirvio!!!!!!!!!!
puse esa linea en el archivo que tiene los datos de la coneccion a la base de datos y se me solucionaron los acentos en todo el sitio
Gracias!!!!!!!!!
pd: por si a alguien le sirve, adjunto el contenido del archivo
$hostname_conn = “dfbhdfghdfhdfhdfh.com”;
August 26th, 2011 at 5:36 am$database_conn = “nombre_de_la_base”;
$username_conn = “usuario”;
$password_conn = “passss”;
$conn = mysql_pconnect($hostname_conn, $username_conn, $password_conn) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database_conn);
mysql_query(“SET NAMES ‘utf8′”); // ESTA ES LA LINEA QUE AGREGUE
El paso 4 es el que me funciono. excelente un diez por esa nota.
August 26th, 2011 at 6:01 pmcomo a todos el paso 4 fue la solucion.
Gracias. un buen aporte.
August 31st, 2011 at 11:25 pmbrother mil gracias esta muy bueno tu post del tema ya tenia rato que quería solucionar esto….
September 1st, 2011 at 9:24 pmsigue así grax
Hola
Y un truco más, existen dos funciones de php utf8_encode() y utf8_decode(), pues utilizas la que proceda (fuente: http://www.php-es.com/language.types.string.html ).
Un saludo
September 2nd, 2011 at 9:56 amBro, buenas notas .. resolvió mis broncas, chido por el aporte
September 3rd, 2011 at 12:23 amGracias, el encode del paso 2 me sirvió. Saludos. :)
September 5th, 2011 at 3:51 amEres lo máx. thanks
September 7th, 2011 at 9:54 pmBuenos días,
pues yo no consigo solucionarlo, debo ser muy cortita.
Por favor si me puedes ayudar, te explico lo que tengo:
1.En la base de datos la tabla agenda que la he modificado utf8_unicode_ci en operaciones–>cotejamiento.
2.Los campos (nombre, dirección, email) los he cambiado también a utf8_spanish_ci
3.Mi archivo test_acentos.php tengo:
Actualización de base de datos
Actualizacion de base de datos
Subcategoria
<?php
$link=mysql_connect("localhost","root","xxx");
mysql_query("SET nombre 'utf8'");
mysql_select_db("mysql",$link);
echo"”;
$sql=”SELECT nombre FROM agenda”;
$result=mysql_query($sql);
$i=0;
September 16th, 2011 at 10:22 amwhile ($row=mysql_fetch_row($result))
{
echo “”.$row[$i].”\n”;
}
echo “”;
?>
Muchas gracias!!! hace rato venia buscando una solucion a esto! y era la base de datos nomas… muy util
September 17th, 2011 at 2:28 amMuchas gracias. Me ha servido bastante
September 25th, 2011 at 3:48 amGracias amigo, el paso 4º es el que me funcionó. Me has ahorrado mucho tiempo. ¡Eres un crack!
September 28th, 2011 at 8:11 amEres un genio mi estimado. Muchas gracias !!!
September 30th, 2011 at 1:25 amSaludos desde México, D.F. !!!!
September 30th, 2011 at 1:26 amExcelente, me sirvio el paso 4!
October 5th, 2011 at 11:15 pmExcelente, me resolvió el paso 4, suficiente
October 10th, 2011 at 7:57 pmGracias
Me salvaste men
el paso 4 me solucionó los “null” que me mostraba un combobox con ciudades y municipios. MUY AGRADECIDO.
=D
October 11th, 2011 at 1:59 pmguena me salvaste
October 11th, 2011 at 10:14 pm[...] Apache o modifícalo6) Como última y desesperada opción, quita todos los htmlentities();FUENTE: XAVIESTEVE.COM Publicado en DHTML, PHP, Publicaciones, Publicaciones | No hay comentarios Deja un comentario [...]
October 12th, 2011 at 1:10 am[...] xaviesteve.com [...]
October 15th, 2011 at 4:36 amMuchas gracias, funciona perfecto!!
October 15th, 2011 at 4:40 amEs increíble como días de desesperación se terminan con esta pequeña línea de código :
mysql_query(“SET NAMES ‘utf8′”);
Muchas Gracias!
October 20th, 2011 at 2:19 amta que la solucion 4 esta de lujo las otras soluciones nunca me funcionaron daban coleraaa como pa agarra a patadas la pc cuando algo no te sale xD
October 24th, 2011 at 11:58 amGenial!!! y encima he tenido la suerte de encontrarlo a la primera ;).
October 26th, 2011 at 6:02 amGracias por la solucion!! El punto 4 me re sirvio!!! Se agradece!!!
October 26th, 2011 at 8:30 pmYo tenía esté problema pero desde la importación de fichero de sentencias SQL, el problema era que estaba importando un fichero bajado de una web y el fichero no estaba en formato utf8. Cuando se guarda hay que asegurarse que el formato es utf8.
October 30th, 2011 at 6:49 pmGenial, funcionó a la perfección.
October 30th, 2011 at 8:25 pmmuchas gracis por compartir tu conocimiento aqui encontre lo q buscaba mucho tiempo el paso cuatro me sirvio de mucha importancia
November 8th, 2011 at 4:07 amgracis!!!!!!!!!! de nuevo
Enserio la mejor respuesta que he recibido, si pude resolver mi error despues de tanto buscar. Muchas gracias. Esta comprobado
November 9th, 2011 at 7:28 pmMuchas gracias bro… Simple, sencillo, y correcto!!!
November 11th, 2011 at 3:54 amMil gracias!
November 15th, 2011 at 1:04 pmMe estaba rompiendo el coco con ese problema.
Solucionado!
wena onda, el paso 4 es la salvacion :D
November 15th, 2011 at 6:38 pmmuy bien!
lo de mysql_query(“SET NAMES ‘utf8′”); fue lo que me ayudo.. thanks
November 18th, 2011 at 3:57 amDias buscando una solución a este problema, hasta que san google me trajo al experto… viejo eres un master… gracias..!!!
November 18th, 2011 at 12:47 pmgenial el post, me ayudó a solucionar mi problema! Gracias!
November 23rd, 2011 at 4:36 pmGracias me funcionó muy bien.
November 27th, 2011 at 11:24 pmHermano gracias totales!! Llevaba horas buscando ya me dolia la cabeza de tanto probar y nada… Me sirvio de maravilla!! Saludos!!
November 28th, 2011 at 10:41 pmen verdad muchas gracias…….. me has salvado la vida……. te deseo mucho exito…
December 1st, 2011 at 2:47 amPequeñas grandes soluciones.
December 1st, 2011 at 4:19 pmMe sirvio el punto 4.
Muchas Gracias¡ =)
December 2nd, 2011 at 12:34 amMuchas gracias excelente tutorial me han salvado la vida
December 2nd, 2011 at 1:08 amEsto esta mas q genial!! Me ayudo exageradamente demasiad0o0o0…ahora me evito una serie de rutinas que tenía preestablecidas para evitar est0o0o….muchisisisisisisisimas gracias!!!
December 2nd, 2011 at 4:05 pmEl paso 4 es una joya! gracias!
December 4th, 2011 at 6:33 pmMuchas Gracias, me salvaste de buenos dolores de cabeza!
December 6th, 2011 at 7:14 pmMe funciono al la primera el de estoy usando dreamweaver cs5 sql con jquery y esta fue la solucion mas facil, rapida, no lo puedo creer aun, espero que tambien me fucione para formularios, por ahora solo manejo textos. Felicidades y muchas muchas gracias, El que sabe, sabe, Eres mi idolo.
December 11th, 2011 at 4:59 amMe has salvado, esto es lo único que me faltaba para poder hacer mis gráficas =)
December 12th, 2011 at 10:08 pmmuchisimas gracias, me sirvio bastante.
December 15th, 2011 at 6:26 pmSupongo que ya lo habran puesto por arriba, pero ahi va un truco.
No hace falta quitar todos los htmlentities, otros siguen haciendo falta. Por ejemplo, puede que al enviar los datos al mysql te los envie con acentos, pero que al mostrarlos, no. Y ahí es donde hace falta un htmlentities para solucionarlo!
[...] que PHP ofrecía están codificadas en Latin-1 en lugar de UTF-8. Afortunadamente, encontré este artículo que habla del tema y que solucionó todos los [...]
December 18th, 2011 at 1:01 pmAmigoooo… Muchisimas gracias. En realidad lo necesitaba…..
January 5th, 2012 at 4:44 pmPaso 1 + Paso 4 = la solución para mi problema actual.
Muchas gracias y espero que no te moleste que me haya “llevado” tu lista de pasos.
January 6th, 2012 at 2:15 amBuena graxias brother lo estaba buscando, bueno me funciono el 4to gracias…
January 8th, 2012 at 10:06 pmMuchas Gracias funciono ok!!! Yo también he renegando con esto por horas!!
January 11th, 2012 at 11:01 pm¡Muchas gracias! La clave… el paso 4 ;-)
January 17th, 2012 at 9:50 amCon el paso 1 y el 4 GRACIAS!!!!!!!
January 18th, 2012 at 6:52 pmEs muy interesante la solución que propones. Solo difiero en el punto de eliminar los htmlentities(), ya que estos (o al menos un parser) son requeridos para evitar la inyección de código a través de entradas en los formularios.
De hecho, la mejor práctica es almacenar los datos con el charset utf-8, y al recuperarlos y trabajarlos por php siempre utilizar htmlentities() o htmlspecialchars(). Al final, para el usuario todo esto es transparente, y como desarrollador, tienes una medida más de seguridad para tus sitios web.
January 19th, 2012 at 7:47 pmYa lo hice pero no funciono, estoy subiendo un archivo en txt delimitado con comas, el cual contiene acentos, al cambiarlo como dices, corta la palabra donde inicia el acento
January 21st, 2012 at 8:04 pmHola Xavi.
February 7th, 2012 at 4:16 pmTengo una (entre otras) duda.
Quiero enviar un e-mail con una ficha html, pero que no esté adjunta, sino que este incrustada en el e-mail. Trabajo con el servidor 1&1, pero como no domino demasiado el tema, no consigo hacerlo. Que puede que tampoco se pueda, no? Espero que esto me lo puedas contestar tambien.
Por otro lado, como lo único que puedo hacer es adjuntar el archivo al e-mail, el título que ve la gente que lo recibe es “Marketing%20Deportivo[1].html”. No creo que sea un nombre de un archivo que atraiga a abrir. Por eso queria preguntar-te como hago para que aparezca ” Marketing deportivo” sin ningun signo raro?
Moltes gràcies.
Hola Esperanza,
Para enviar un email con formato HTML tienes que usar este codigo PHP (cambia los parametros por los tuyos):
$to = "From: Xavi <xavi@example.com>\r\n";
$subject = "Marketing deportivo";
$html = "codigo html aqui";
$headers = "From: Esperanza <esperanza@example.com>\r\n";
$headers .= "Reply-To: esperanza@example.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
mail($to, $subject, $html, $headers);
Saludos,
February 7th, 2012 at 5:17 pmXavi
muchas gracias xavi, y gracias por tu rapidez!
February 8th, 2012 at 8:45 amsaludos,
espe
Hola, quería darte las gracias, me ha servido de mucho. La verdad es que era un problemón.
Saludos :)
February 8th, 2012 at 5:02 pm