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á.
Enlaces Relacionados
- Comprimir y ofuscar archivos Javascript
- Proyecto de SIMILE, Timeplot
- XML y PHP 5
- Nuevo proyecto de SIMILE, Timeplot
- El rediseño de la portada de Google requiere Javascript
- Ajax un poco más fácil con jQuery
- Cosas que no puedes hacer con Javascript
- Las funciones Javascript más útiles
- Los 7 pecados mortales de Ajax
- Fácil menu contextual con Prototype





El <meta> no lo soluciona
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
Si funciona
Me funciono al 100% GRACIAS!!!!!!!
Gracias por tu ayuda me
Gracias por tu ayuda me funcionó perfectamente.
como puedo obtener el manual
nesesito elmanual para aprender de esteprograma
Este código parece una
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 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.
me lo mando un compañero de
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
con un meta
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.
a mi tambien me paso
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.
a mi me paso lo mismo
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.
Enviar un comentario nuevo