Problemas de acentos con Ajax

Por el 9 de Abril de 2007

en: Internet

Este es un problema con el que la mayoría de las personas que empiezan con Ajax se tropiezan alguna vez.

Se trata del problema de carácteres especiales y Ajax, esto ocurre al pasar la información desde PHP a Javascript dónde se pierden carácteres importantes cómo los acentos o las ñ.

Buscando por internet encontrarás muchas soluciones pero muchas de ellas no te ayudan en nada, se suele tender a pensar que el problema esta en la codificación de carácteres (UTF8, ISO-8859-1, etc) pero la solución a menudo está en el uso de la función urlencode() que devuelve la cadena codificando los espacios como signos de suma (+) y los demás carácteres los codifica con %+código.

Si lo que pretendemos arreglar es texto que no está agrupado en ninguna variable deberiamos fijarnos que los acentos y carácteres especiales esten escritos de esta manera:

avión -> avión
jugará -> jugará
jugón -> jugón

Ahora para terminar y que se muestre todo perfecto en nuestro archivo Ajax al recoger el resultado utilizaremos la funcion.

En el archivo de AJAX al recoger el resultado debemos hacer un unescape, para mostrar los carácteres correctamente y no su código:

unescape(“He%20aquí”)=”He aquí”

Ademas sustiuiremos los símbolos (+) por espacios:

cadena=unescape(ajax.responseText);
cadenafinal=cadena.replace(/\+/gi,” “);
document.getElementById(contenidor).innerHTML=cadenafinal;

Probablemente a muchos no les sirva de gran ayuda esta entrada pero el qué estaba buscando la solución a este problema seguro que lo agradecerá.

21 Respuestas a Problemas de acentos con Ajax

Avatar

felix

10 de Abril de 2007 a las 2:50 am

Hola, yo tambien me he encontrado con problemas del mismo estilo. Al final tambien hay que fijarse en la cabecera de la pagina, si es iso o uft8. Finalmente si no recuerdo mal tuve que poner a mano en la pagina un header con iso, sino no habia manera.
A mi Ajax me gusta pero para cosas muy concretas, en definitiva, pijadas para que quede mas usable y bonita la pagina, pero no como un “siempre hay que poner ajax porque esta de moda”.
Saludos.
Pda: No hay manera de “acertar” el problema matematico. No funciona bien el sistema.

Avatar

javi

11 de Abril de 2007 a las 9:07 am

solucinarlo con la funcion de php utf8_decode
Esta función decodificadata, asume codificación UTF-8 , a ISO-8859-1.

tambien esta utf8_encode:
Esta función codifica la cadena dada a UTF-8, y devuelve la versión codificada.

Avatar

PielRoja

11 de Abril de 2007 a las 5:20 pm

yo tenia ese problema pero simplemente lo solucione con un meta:

este lo copie en la pagina donde voy a mostra el contenido por AJAX , y no tube nesecidad de modificar las funciones.

Avatar

Alvaro

17 de Abril de 2007 a las 7:46 am

Este código parece una copia del que hay en http://ajax.elmultiusos.com/doc.php?op=contingut&id=1164 (antes era la web de http://www.xlwebmasters.com)

Lo mas decente seria poner un enlace a dicha web.

Lo he visto porque yo lo saque de alli el dia que lo pusieron y hoy mirando esta web me ha sonado repetido.

Avatar

manu

17 de Abril de 2007 a las 10:23 am

me lo mando un compañero de trabajo, pero por lo que he visto no es ninguna copia y si se parece pues nada ya esta ahi puesto el enlace ;) , muchas gracias por el aviso

Avatar

Anónimo

14 de Diciembre de 2007 a las 10:32 am

nesesito elmanual para aprender de esteprograma

Avatar

Perfecto!!!

5 de Mayo de 2008 a las 8:53 pm

Gracias por tu ayuda me funcionó perfectamente.

Avatar

legolas

7 de Enero de 2009 a las 11:00 am

yo lo he intentado todo pero nanda alguien me da otro truco no tngo mucho tiempo con ajax asi q si me pueden asesorar un poco mas gracias!!!

Avatar

WIZARDS57

9 de Julio de 2008 a las 3:42 pm

Me funciono al 100% GRACIAS!!!!!!!

Avatar

Anónimo

14 de Octubre de 2008 a las 9:30 pm

Gracias! solucione mi problema con esta funcion.

Avatar

Maikl

21 de Agosto de 2008 a las 7:33 am

Hola a todos,
tengo una página con la cabecera meta con el charset=iso-8859-1, hasta ahora todo era perfecto y los acentos y caracteres especiales se mostraban bien.
Pero ahora estoy pasando el programa a Ajax y los textos que recibo en las llamadas no se me convierten al charset indicado saliendo los carácteres raros.
La solución por el momento es usar htmlentities() de php para transformar esos carácteres a su equivalente html.
El siguiente problema fue que en el contenido hay partes en html y esta función me las inutiliza ya que convierte los signos < , >, etc
Buscando en la página de php encontré esta función:

function htmlButTags($str)
{
// Take all the html entities
$caracteres = get_html_translation_table(HTML_ENTITIES);
// Find out the "tags" entities
$remover = get_html_translation_table(HTML_SPECIALCHARS);
// Spit out the tags entities from the original table
$caracteres = array_diff($caracteres, $remover);
// Translate the string....
$str = strtr($str, $caracteres);
// And that's it!
return $str;
}

Esta función transforma solo los carácteres especiales de las letras y no los símbolos html.
Origen

Bueno siento el comentario tan largo pero espero que a alguien le pueda servir la solución.
Y si alguien conoce una forma mejor de hacerlo le agradeceria que lo dejara aquí.
Saludos,
Maikl

Avatar

echuc

29 de Septiembre de 2008 a las 2:08 pm

La idea del internet es ayudarnos y no hacer este tipo de observaciones tratando de poner en evidencia a alguna persona y si la idea es poner la liga con solo mencionarlo seria suficiente y no caer con ese tipo de comentarios.

Avatar

Efrén

26 de Septiembre de 2008 a las 6:21 pm

Y como puedo hacerlo sin usar una funcion php, ya que yo uso JSP.

Por su atencion, gracias.

Avatar

romi

13 de Febrero de 2009 a las 7:52 am

me salvaste!!! gracias!

Avatar

Anónimo

13 de Mayo de 2009 a las 12:57 am

Una mierda tu aporte, que quieres que te diga..
pero es lo mejor que he encontrado en dos idiomas diferentes.
Gracias.

Avatar

losphiereth

25 de Mayo de 2009 a las 2:59 pm

Mil gracias por tu aporte, estaba buscando esto justamente.

Saludos.

Avatar

Edu

9 de Noviembre de 2009 a las 8:47 am

Maikl, mil gracias por tu funcion:
function htmlButTags($str) {
// Take all the html entities
$caracteres = get_html_translation_table(HTML_ENTITIES);
// Find out the “tags” entities
$remover = get_html_translation_table(HTML_SPECIALCHARS);
// Spit out the tags entities from the original table
$caracteres = array_diff($caracteres, $remover);
// Translate the string….
$str = strtr($str, $caracteres);
// And that’s it!
return $str;
}

Ha resuelto mi problema con acentos para textos traidos via ajax a las mil maravillas.

Avatar

Genaro Albuerne

23 de Noviembre de 2009 a las 5:39 pm

Y ke se supone que gurdare en la BD toda esa sopa de caracteres ke no se entienden?
No crees basura en la web.

Avatar

Cituwonder

5 de Enero de 2010 a las 7:00 pm

Así se hace automáticamente desde php para AJAX:

además si deseas cambiar caracteres tienes ésto:

$miSalidaTXT=”Un texto con acentos: áéñÁÉÑ”;
$arr=Array(“á” => “a”, “é” => “e”, ……., “ñ”=>”n”);
$miSalidaTXT=strtr($miSalidaTXT,$arr);

Avatar

Cituwonder

5 de Enero de 2010 a las 7:02 pm

$cadena=”áéíóúñÑ”;
echo utf8_encode($cadena); // Ojo, encode y no decode
?>

Avatar

Cituwonder

5 de Enero de 2010 a las 7:03 pm

$cadena=”áéíóúñÑ”;
echo utf8_encode($cadena); // Ojo, encode y no decode

Dejar un comentario

Patrocinadores

¿Interesado en patrocinar TuFunción?

Suscripción

Primera División