Chilelog.com tiene como finalidad fomentar el uso de weblogs en chile y ayudar a acercar a los lectores y autores en directorios temáticos de fácil acceso.
Hace un tiempo tuve un problemas que he visto mucha otra gente tiene en sus blogs y tiene que ver con la codificación de los acentos que son cambiados por caracteres raros, en un primer momento para mi no fue nada facil determinar el motivo y por lo mismo puede que no todo el mundo lo sepa, lo que ocurre es que AJAX utiliza la funcion javascript xmlhttprequest como una de sus herramientas principales para cambiar el contenido de dom objects sin necesidad de recargar toda la página, este es el metodo usado por ejemplo para lso comentarios de wordpress en su versión k2 y en general para cualquier aplicación que haga uso de tecnicas avanzadas de ajax que emplean dicha funcion.
El punto es que por algún motivo, o más bien por el motivo de estandarizar el cuento esta función de AJAx utiliza el encode utf-8 para realizar las transferencias de datos, por lo que si tenemos una página default que utiliza la codificacion mas antigua por ejemplo latin o iso producira errores al no reconocer la entrada en lso forms de caracteres especiales en otra codificación.
En concreto el problema se presenta si se utiliza esta especificacion de caracteres en su sitio:
< meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1″ />
Lo correcto para evitar problemas seria utilizar:
< meta http-equiv=“Content-Type” content=“text/html; charset=utf-8″ />
un ejemplo de problemas entre codificación de caracteres es la que le ocurre a mi amigo anexo en el el telefono rojo.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque sed felis. Aliquam sit amet felis. Mauris semper, velit semper laoreet dictum, quam diam dictum urna, nec placerat elit nisl in quam. Etiam augue pede, molestie eget, rhoncus at, convallis ut, eros. Aliquam pharetra. Nulla in tellus eget odio sagittis blandit. Maecenas at nisl. Nullam lorem mi, eleifend a, fringilla vel, semper at, ligula. Mauris eu wisi.
Raf
February 14th, 2006 at 5:23 pm
Hola, yo tengo el mismo problema, pero no se me resolvió con poner .
Lo que yo tengo es un index.php, mismo que tiene un , ahí meto la información que jalo desde distintos archivos x.php, y.php, z.php, estos no tienen más que lo que van a mostrar, nada de ni nada sólo la continuación del código que está antes que el DIV de index.php, por ejemplo:
y quiero cargar x.php, que es de la siguiente forma
pero lo que hay en x.php tiene acentos, y los respeta si llamo a x.php desde el navegador, pero si lo cargo con xmlhttprequest me pone ? en lugar de acentos.
Espero que me puedas ayudar, muchas gracias.
Raf - México
Salvatore
February 14th, 2006 at 8:13 pm
Como te decia el problema ese tiene que ver con la codificacion utilizada en los caracteres con que esta escrito dichos archivos, esta puede estar ya incluida cuando se crearon dichas letras te recomendarias cambiarlas por algo más estandar como el & acute para los acentos y asi evitarse este tipo de problemas, ya que por ejemplo cuando creas un archvio con notepad y tu pc lo tienes para que utilize caracteres del tipo latin el archivo quedar con esta codificacion para los caracteres (a nivel ascii) independiente de como le digas que los represente despues.
A mi me paso algo similar con la informacion que tenia que rescatar en una base de datos que utilizaba forms en paginas con codificacion latin en la db quedaron lso caracteres guardados con ese tipo de letras y despues cuando los recuperaba con AJAX se veian super feos a pesar de cambiar la especificacion a utf-8 peor los nuevos textos que se guardaron en la db se visualizaban correctamente
Es una lata pero por eso la recomendacion es utilzar como estandar el utf-8 incluso en dreamweaver notepad y todo lo demas para evitar ese problema.
Lamentablemente no se de una solución para tu problema yo no la encontre la unica opcione s como te digo reescribir esos archivos x.php etc.. en una codificacion utf-8 no solo especificarlo en el header
Fede
March 2nd, 2006 at 2:20 pm
A mi me funciona ok, poniendo en los meta de la pagina:
dentro de la funcion que envia los datos al objeto ajax, tiene la siguiente codificacion:
HttpReq.setRequestHeader(’Content-Type’, ‘application/x-www-form-urlencoded’);
con esto consigo que funcionen caracteres raros y acentos en ajax (como se puede apreciar en la base de datos, en caso de usar ajax para guardar datos, los acentos se escriben en forma extraña como por ej, la “á” se escribira como “á”, pero si en la pagina que se la levanta tiene esta codificación, santo remedio).
Saludos…
Fede
Salvatore
March 2nd, 2006 at 6:17 pm
wen dato fede! eso solucionaria bastante problemas lo voy a probar a ver que tal..
kemmotar
March 3rd, 2006 at 6:13 pm
Hola a todos,
Tengo el mismo problema al utilizar Ajax. Las palabras que llevan acentos al recogerlas en el javascript no m salen en la pagina jsp, y lo peor de todo, al tener alguna palabra acento, no se me escribe ninguna del documento xml generado. Si alguien sabe como solucionarlo le estaría muy agradecido.
Saludos, kemmotar
daniel
March 10th, 2006 at 9:54 am
me gustaria saber si hay alguna libreria de ajax en la que funcione iso-8859-1
Gracias
Micox
April 12th, 2006 at 3:01 pm
“me gustaria saber si hay alguna libreria de ajax en la que funcione iso-8859-1″
- A mi tambíen…
Raúl
April 30th, 2006 at 9:59 pm
Una contribución al código libre :p : aá eé ià (ojo alt-240 es invisible) oóó uú nñ A E I O U N
Juan
May 10th, 2006 at 7:12 pm
El objeto xmlhttprequest trabaja con UTF-8, no hay otra codificación para trabajar sin tener problemas.
Deben convertir sus archivos php a utf-8, es simple con la instrucción recode. Ej: recode ISO-8869-15..UTF-8 archivo.php
Luego, indiquen a su motor de base de datos que trabaje con UTF-8 o UNICODE.
Finalmente, en su implementación javascript, realicen las peticiones con:
xmlHttpR.setRequestHeader(”Content-Type”, “application/x-www-form-urlencoded”);
xmlHttpR.setRequestHeader(”Accept-Charset”, “UTF-8″);
Con eso no tendrán problemas.
pedro
May 12th, 2006 at 12:48 pm
Yo utilizo para los acentos
á á Á Á
é é É É
í í Í Í
ó ó Ó Ó
ú ú Ú Ú
ñ ñ Ñ Ñ
¿ ¿ ¡ ¡
ü ü Ü Ü
>
& &
Jose
May 30th, 2006 at 8:11 am
Hola,
mi problema parece más grave
En una página que envía a un ajax datos post hago lo siguiente:
A todos los parámetros enviados por post les hago esto:
postParams.push(name + “=” + encodeURIComponent(value));
Luego al enviar…
http_request.setRequestHeader(’Content-Type’, ‘application/x-www-form-urlencoded’);
http_request.setRequestHeader(’Accept-Charset’, ‘UTF-8′);
Bien, los acentos funcionan (casi). Funcionan todos los caracteres que he ido probando (ç, ñ, é, í, ó, ú, Á, é…) os habéis fijado que falta la “á”??? Es increíble, este caracter me lo saca con el signo de interrogación dentro de un rombo seguido de un signo de exclamación. Alguien tiene alguna idea de porque puede ser esto?
Jack Pelorus
May 30th, 2006 at 12:42 pm
yo lo pude resolver haciendo uso de la funcion “iconv” antes de imprimir los datos en la variable de salida antes de que lo tome ajax y lo lleve hasta el cliente
jesusvld
June 6th, 2006 at 2:03 pm
MUCHAS GRACIAS hermano chileno, soy de peru y realmente este articulo que escribistes me ha salvado. No me creeras que lleva horas buscando la forma de acabar con los errores de las tildes y eñes… sinceras gracias
Beto
August 19th, 2007 at 12:36 am
yo tuve el mismo problema, mi solucion fue remplazar todos los caracteres en el ASP que parsea el XML, con replace logre cambiar todos los caracteres, ej:
ItemContent = Replace(ItemContent,”á”,”á”)
para los que no esten parseando en javascript esto puede ser de ayuda, y si o es VBScript el lenguaje que usan debe haber un equivalente, Saludos
gret
September 18th, 2007 at 4:16 pm
hola! tengo el pequeño pero gran problema de las tildes y las ñ, pero con ninguna opción logro solucionarlo, quisiera que me aportaran un poco de ayuda: aca esta una parte de mi codigo para ver si me ayudan por fisss!!! soy nueva con ajax… estoy usando php, ajax
function objetoAjax(){
var xmlhttp=false;
try{
xmlhttp = new ActiveXObject(”Msxml2.XMLHTTP”);
}catch(e){
try{
xmlhttp = new ActiveXObject(”Microsoft.XMLHTTP”);
}catch(E){
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!=’undefined’) {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function enviarDatosEmpleado(){
//donde se mostrará lo resultados
divResultado = document.getElementById(’resultado’);
divFormulario = document.getElementById(’formulario’);
divResultado.innerHTML= ”;
//valores de los cajas de texto
id=document.frmempleado.id.value;
id_estac=document.frmempleado.id_estac.value;
pendiente=document.frmempleado.pendiente.value;
//instanciamos el objetoAjax
ajax=objetoAjax();
//usando del medoto POST
//archivo que realizará la operacion ->actualizacion.php
ajax.open(”POST”, “actualizacion.php”,true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
//mostrar los nuevos registros en esta capa
divResultado.innerHTML = ajax.responseText
//una vez actualizacion ocultamos formulario
divFormulario.style.display=”none”;
}
}
//muy importante este encabezado ya que hacemos uso de un formulario
ajax.setRequestHeader(”Content-Type”,”application/x-www-form-urlencoded”);
//enviando los valores
ajax.send(”id=” id “&id_estac=” id_estac “&pendiente=” pendiente)
}
function pedirDatos(id){
//donde se mostrará el formulario con los datos
divFormulario = document.getElementById(’formulario’);
//instanciamos el objetoAjax
ajax=objetoAjax();
//uso del medotod POST
ajax.open(”POST”, “consulta_por_id.php”);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
//mostrar resultados en esta capa
divFormulario.innerHTML = ajax.responseText
divFormulario.style.display=”block”;
}
}
//como hacemos uso del metodo POST
ajax.setRequestHeader(”Content-Type”,”application/x-www-form-urlencoded”);
//enviando el codigo del empleado
ajax.send(”id=” id)
}
Fernando
October 31st, 2007 at 3:56 pm
Hace unos años realize una pagina web en html con codificacion ISO ahora que quiero incluir esta informacion en mi blog no tengo manera que cambiarlo a UTF-8 en mi blog se ve a la perfeccion pero cuando lo busco en technorati google blogs o blogalaxia me sale con un monton de caracteres ????.
He probado con ultraedit y notepad , o es que hago algo mal pero no puedo llevar la configuracion de ISO a UTF, talvez estoy haciendo algo mal ayuda por favor
atte
Fernando
Gustavin
November 5th, 2007 at 12:48 am
Bueno, es inevitable utilisar: xmlHttpR.setRequestHeader(”Content-Type”, “application/x-www-form-urlencoded”) cuando se quiere enviar variables POST, el problema es cuando se quiere registrar información sobre una base de datos MySQL configurada con iso-8859-1 y se registran caracteres raros. Para evitar ese problema en PHP, existe una función para convertir una cadena de UTF a 8859-1, que se llama: utf8_decode(). Con esto logramos registrar la información correctamente en iso 8859-1
Ahora si queremos consultar la información registrada utilisando también AJAX (con GET o POST), se puede escribir al final de la página php que procesa la consulta lo siguiente en PHP:
header(’Content-Type: text/html; charset=ISO-8859-1′);
Esto me ha funcionado bien, y espero que les pueda servir de ayuda
Jorge Portillo
November 13th, 2007 at 3:12 am
Gustavin…. esa es la mejor solución… tuve que leer hasta el ultimo post pero es lo mejor… gracias…