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
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.
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.
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.
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.
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
Anónimo
14 de Diciembre de 2007 a las 10:32 am
nesesito elmanual para aprender de esteprograma
Perfecto!!!
5 de Mayo de 2008 a las 8:53 pm
Gracias por tu ayuda me funcionó perfectamente.
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!!!
WIZARDS57
9 de Julio de 2008 a las 3:42 pm
Me funciono al 100% GRACIAS!!!!!!!
Anónimo
14 de Octubre de 2008 a las 9:30 pm
Gracias! solucione mi problema con esta funcion.
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
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.
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.
romi
13 de Febrero de 2009 a las 7:52 am
me salvaste!!! gracias!
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.
losphiereth
25 de Mayo de 2009 a las 2:59 pm
Mil gracias por tu aporte, estaba buscando esto justamente.
Saludos.
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.
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.
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);
Cituwonder
5 de Enero de 2010 a las 7:02 pm
$cadena=”áéíóúñÑ”;
echo utf8_encode($cadena); // Ojo, encode y no decode
?>
Cituwonder
5 de Enero de 2010 a las 7:03 pm
$cadena=”áéíóúñÑ”;
echo utf8_encode($cadena); // Ojo, encode y no decode