Tip Para Solucionar Problema con Acentos al Utilizar AJAX

Tip Para Solucionar Problema con Acentos al Utilizar AJAX logo ajaxSi utilizas AJAX en tu sitio y el charset que utilizas es ISO-8859-1 habras notado que cuando recibes un responseText con acentos o ñ te muestra simbolos raros, esto es debido a que los request de AJAX utilizan la codificación UTF-8. Para solucionar esto debemos indicarle a la respuesta en AJAX que utilice el charset es ISO-8859-1 para esto en PHP utilizamos la función header();

Ejemplos:

Para devolver HTML

[code lang="php"]

header("Content-Type: text/html; charset=iso-8859-1");

[/code]

Para devolver Javascript

[code lang="php"]

header("Content-type: text/javascript; charset=iso-8859-1");

[/code]

Para devolver XML

[code lang="php"]

header('Content-type: text/xml; charset=iso-8859-1');
echo "\n";

[/code]

Con eso solucionamos el problema de los acentos en la respuesta de AJAX.Ahora también existe el problema al momento de enviar los datos de un formulario mediante AJAX ya que también se envían codificados en UTF-8 por lo que al guardarlo en la base de datos observaremos que se guardan símbolos raros. Para solucionar esto utilizamos la función utf8_decode de php.

Por ejemplo:

[code lang="php"]

$variable = utf8_decode($_POST['variable']); //Y asi para todas las variables que podrían contener acentos o ñ

[/code]

Para ahorrarnos el trabajo de hacerlo variable por variable pueden implementar la siguiente función:

[code lang="php"]

function decodeUTF8($array) {

foreach ($array as $k => $postTmp) {
if (is_array($postTmp)) {
$array[$k]= decodeUTF8($postTmp);
}else{
$array[$k] = utf8_decode($postTmp);
}
}

return $array;
}
//Su uso:

$_POST = decodeUTF8($_POST);

[/code]

Los ejemplos son en PHP pero deben tener sus similares en otros lenguajes de servidor como ASP, JSP, etc…

  • Pingback: Actualidad, Entretenimiento y Humor » Tip Para Solucionar Problema con Acentos al Utilizar AJAX

  • http://www.empchile.cl cap
    gracias me aliviaste el dolor de cabeza que tenia con los acentos
  • http://localhost Stalin
    Aunque el problema ya tiene tiempo, y esta solución me sirvio para el ingreso de datos, pero cuando cargaba los datos de la BD la cual ya tenia, tube el problema de como mostrar los datos y basto esta linea para solución

    mysql_query(“SET NAMES ‘utf8′”);
    Parte del Código
    $ssql = “SELECT Campo FROM Tabla;”;
    mysql_query(“SET NAMES ‘utf8′”);

    $rs = mysql_query($ssql);
    if (mysql_num_rows($rs)==0)
    { . . .

  • http://www.dragonita.com amita_esp
    Me has salvado la vida,Gracias
  • Dario
    Buenísimo, me habia vuelto loco el tema de los acentos, funcionó al pelo.
  • Marco
    Muchas gracias, lástima que o poca gente haya agredecido o poco gente haya resuleto este problema con este tip, a mi me funcionó a las mil maravillas y busque mucho y en muchos lugares siempre es la misma pregunta y miles de respuestas muy complicadas, como funciones para reemplazar los caracteres y no se que tantas cosas. Otra vez gracias.
  • alvaro miranda
    Pariente muchisimas gracias solo copie y pegue esto header(“Content-Type: text/html; charset=iso-8859-1″); en la pagina q hacia la llamada con ajax y funciono 100 pts busque toda la mañana codigos en vb y no se q mas configuraciones y me pille con esta respuesta muy bien muchas gracias :D
  • Juan
    Gracias por la ayuda, me ha servido
  • http://www.creandosistemas.com.mx Rodrigo
    Gracias por la solución, desde ahora en favoritos de mi navegador, saludos.
  • http://cubopanel.com elias
    que tal, tengo el mismo problema de los acentos pero solo al guardar un form en MySQL, use poner el utf8_decode variable por variable y funciona perfecto, pero al tratar de hacerlo con el metodo de la funcion no me funciono, alguna sugerencia.

    Saludos

  • Bladimir Ajat
    Muchas gracias señores de webadictos.com.mx, son de gran ayuda los tips. Busqué por todos lados pero nadie explicó con buen detalle.
  • Ana
    Muchas gracias, llevo toda la tarde con este asunto y la función utf8_decode me ha resuelto el problema.
    Sólo me falta un detalle: header(“Content-Type: text/html; charset=iso-8859-1″);
    para devolver HTML va perfectamente con todos los símbolos salvo el € (euro) con el navegador IE., ¿sabéis como solucionarlo?
    Saludos
  • Antonio
    Hola gracias! solucionado, llevaba una hora mirando foros y no me había servido nada, y era tan simple…

    Ana, el caracter de euros no esta dentro del iso-8859-1 si no en el iso-8859-15 metieron varios caracteres más en esta revisión el euro y algunos caracteres raros nórdicos, puedes mirarlo en wikipedia

  • The Diamons
    Muchisimas gracias
  • http://komtec1.blogspot.com Komtec1
    Huy genial! ayer me di cuenta de este problema y con esto lo solucione! muchas gracias :D ;D ;D ;D
  • Jesus Daniel
    Gracias cuate algo asi habia leido pero no encontraba la forma para el ajax me has salvado jejejeje….gracias de nuevo
  • Marco Diaz desde Chile.
    Muchas gracias!!!!!!!!!!
  • Miguel
    Hola!
    yo tengo un problema cuando hago el update en un registro cuando pongo una palabra acentuada ejem.(áéíó) o ñ me guarda en la base de datos hasta donde esta el acento catálogo solo guarda cat y lo demas lo omite alguna solucion??
    gracias
  • http://www.aldeaglobal.com.ar Sonia de Castelar
    excelente!!! hace dias doy vueltas al asunto! via ajax se cargaba con un javascript un iframe de un archivo PHP. una ensalada q desobedecia al META charset… obviamente en Internet Explorer solamente. con tu solucion lo resolvi genial. gracias!!!
  • Agamdaz
    MUUUUUUUUUUUUUCHAS GRACIAS!!!!
  • Edgardo
    Me salvaste Loco!!! Gracias!
  • http://www.chronoezone.com.mx ChronoAntonio
    Mas que excelente!, me siervio de mucho y resolvio el problema de mas de 5 horas XD.
  • VMT
    Muuuuchas gracias
  • Bugler1
    Gracias por esta explicación. Ha funcionado a las mil maravillas.
  • JCG
    Gracias de veras llevo todo el día buscando información y realmente he terminado mareado. Gracias de nuevo
  • Andres
    Sos un genio, leí de todo y con esta explicación resolví mi problema. Muchas gracias.
  • samantha
    me ayudaste muchooooo gracias!
  • Elías S. Peña T.
    Excelente aporte!!!