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

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

Para devolver Javascript

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

Para devolver XML

  1. header(‘Content-type: text/xml;  charset=iso-8859-1′);
  2. echo "<?xml version="1.0" encoding="ISO-8859-1"?>\n";

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:

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

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

  1. function decodeUTF8($array) {
  2.  
  3.         foreach ($array as $k => $postTmp) {
  4.                 if (is_array($postTmp)) {
  5.                         $array[$k]= decodeUTF8($postTmp);
  6.                 }else{
  7.                         $array[$k] = utf8_decode($postTmp);
  8.                 }
  9.         }
  10.  
  11.         return $array;
  12. }
  13. //Su uso:
  14.  
  15. $_POST = decodeUTF8($_POST);

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

  • 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!