26May 2009 27 Comments */?>

Acentos y caracteres especiales con Ajax y JQuery

Categorías: JQuery - Tags: ,

Unos de mis primeros problemas al usar jquery.forms o $.Ajax era que los acentos ,la ñ , etc no eran ingresados correctamente en la base de datos y por lo tanto no se mostraban correctamente en mis programas y por lo general aparecian como cuadraditos o rombos negros con un signo de interrogación adentro.
Algunos de los caracteres afectados:

á, é, í, ó, ú ,Á, É, Í, Ó, Ú, ñ, Ñ ,º ,ö, Ö, ü, Ü

Una forma simple para solucionar esto es hacer lo siguiente:

En el formulario agregar accept-charset=”utf-8

1
2
3
<form id="formulario" action="index.php" accept-charset="utf-8" method="post">
<input type="input" name="nombre"/>
</form>

Y a la hora de recibir el dato ya sea mediante $_POST o $_GET tenemos que hacer un utf8_decode() y ya estará listo el valor para ingresar en la base de datos.

1
$usuario=utf8_decode($_POST['nombre`]);

Con este método JQuery ya no me da problemas con los caracteres especiales. Saludos!!!

UPDATE: SEGUNDA PARTE

Damián Logghe

Programador freelancer y emprendedor en sueños. Contento de ser mi jefe y poder hacer lo que me gusta. WordPress es mi principal fuente de ingreso y me escribo tanto para ayudar como para tener una guia de memoria. Quieres contratarme? Déjame un mensaje.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus

  • Isaac

    wow! muchisimas gracias! este post es justo lo que necesitaba! no te imaginas cuanto pelee con el jquery para que se ingresara correctamente los caracteres, pase horas en esto! pero gracias a este tip que posteaste me funciona a la perfeccion! gracias!

  • müller

    Muchas gracias!

  • Albert

    ¡¡ Gracias !! Llevo días peleandome con este problema jeje.

  • Portilla

    Yo tuve el mismo problema y lo solución que se muestra aquí esta buenísima, sin embargo, tengo un problema que no se resulve con esto, cuando envió a través de AJAX una cadena que contiene por ejemplo signos matemáticos como (+,-,etc) no me los escribes en la base de datos, y me está enviado en su posición una caratcer vacío. Si alguien ha tenido el mismo problema y me podría ayudar sería muy bueno

  • Si tenemos la base de datos en unicode que es lo que toca, no es necesario hacer el utf8decode 😉

    Y cuando respondamos con texto desde php a una petición ajax, antes de hacer el echo, hay que enviar una cabecera con la codificacion utf-8 :

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

  • Para el problema de los signos más y menos puedes usar url_decode o raw_url_decode

  • Antonio Lavey

    Vaya, después de liarme con muchos foros y blogs llego aquí y me depejás todo, ya puedo ir a dormir tranquilo.

    Venga que sos un chingon.

    Gracias.

  • Uauhhh!!! Pero que bien explicado y con qué claridad!.

    Mi enhorabuena!. Muchas gracias por compartirlo.

  • Pingback: Acentos y caracteres especiales con Ajax y JQuery II parte | Timersys()

  • Ernesto

    Siento poner aquí el código pero estoy dandome de cabezazos contra él y no veo nada diferente a lo que habeis indicado aquí:

    prueba AJAX con JQuery y ASP

    function AJAX_con_JQuery_y_ASP ()

    {

    $.ajaxSetup({

    beforeSend: function(xhr) {

    try{xhr.overrideMimeType("text/html; charset=iso-8859-1");} //FF & Chrome

    catch(e) {xhr.setRequestHeader("Content-Type","text/html; charset=iso-8859-1");} //IE8

    }

    });

    $.ajax({

    type: "POST",

    url: "AJAX_con_JQuery_y_ASP.asp",

    data: $("form[name=formPrueba]").serialize(),

    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",

    success: function(responseText) {$("#ResponseAJAX").html(responseText);}

    })

    }

    junto con el asp:

    Texto enviado por AJAX:

    Gracias por vuestra paciencia,

    Saludos,

    Ernesto.

    • Hola ernesto, que error te da? Miraste la consola de firebug?

  • Ernesto

    Hola Damian,

    antes de nada comentar que el anterior post está incompleto ya que, me imagino que por temas de seguridad, ha obviado texto.

    En realidad no me da error sino que no consigo enviar carácteres especiales a traves de AJAX con JQuery + ASP.

    Si tuvierais un ejemplo lo pruebo y así ahorro trabajo.

    Gracias,

    Ernesto.

  • Pingback: Como usar AJAX Auto Suggest V2.0 | Timersys()

  • MUCHISIISISISISMAS GRACIAS SALVASTE LA VIDA!

  • Jorge

    Muy bueno, Muchas gracias. Simple y efectivo!

  • Carlos Leiva

    Muchas gracias compa!!! uhhh, he buscado como loco y nada me había funcionado, te agradezco inmensamente el aporte. Saludos!

  • Neochange

    Fácil y conciso, gran aporte! muchas gracias

  • Antonio Valle

    Excelete el aporte principalmente si deseas realizar consultas con caraceres especiales, ya me ahorre un dolor de cabez con esta funcion utf8_decode(); , excelente =)

  • Juan Carlos

    Gracias por la aportación, solución rápida, efectiva y sin complicaciones a la hora de implementarla.

  • Juan Carlos

    Este cógigo va genial si se utiliza para insertar un registro en una base de datos, pero si se quiere por ejemplo mostrar los resultados en una búsqueda, los resultados te los muestra con caractére raros (ñ acentos, ª, etc.).

    Para solucionarlo, además de lo comentado al principio de este post, solo hay que poner en el PHP, ANTES DE LA CONEXIÓN, en la primera línea del archivo que es llamado por ajax:
    <? header("Content-Type: text/plain; charset=ISO-8859-1"); ?>

    Y ya está, te muestra todo OK.

  • Test

    VIENTOS! me sacaste de un apuro

  • Cristiangranged428

    Después de mirar una hora, menos mal que dí contigo!! eres mi idolo Lol jajajajj el mejor!!
    ya estas en mis favoritos.

    Gracias.

  • Zeuxx329

    Damián Excelente aporte me acabas de sacar de un circo vicioso de preguntas sin respuestas
    gracias

  • Emilio Vega

    Gracias por el aporte, me he vuelto loco buscando una solución, pero sigo sin entender porque no me envía bien los datos ya que en otros formularios que hice no he tenido este problema.

    Dejo mi aporte para los que tengan que recibir mas de un campo en php y quieran decodificar todo de un tirón :

    $_POST = array_map(‘utf8_decode’, $_POST);

    gracias de nuevo. 

  • Jgarciac87

    Mil Gracias!!

  • Rody

    Excelente el metodo $_POST = array_map(‘utf8_decode’, $_POST); y saber que el utf8_decode CORRIGE EL PROBLEMA!

    me salvaron la vida!

  • Emrg_90

    Muchas gracias me salvo la vida excelente…. saludos