| ||||
Error con acentos con carga asíncrona Acabo de implementar en mi página web una carga asincrona con javascript. El problema es que al llamar a otra página para cargarla dentro de la principal, las letras con acento se cargan como un cuadro, removiendo además las dos siguientes letras a esta. ¿Alguien podría decirme como corrijo esto para mostrar la información de forma correcta? |
| ||||
Re: Error con acentos con carga asíncrona Lo hago directo con JavaScript ya que mi página está en un servidor gratuito. El código que uso es este, enviando como parámetro url una página html y para id el div en el que se cargará:
Código:
¿Puedo solucionar mi problema? function loadurl(url, id){ var pagecnx = crearXMLHttpRequest(); pagecnx.onreadystatechange=function() { setpage(pagecnx, id) } pagecnx.open('GET', url, true) pagecnx.send(null) } function setpage(pagecnx, id){ if (pagecnx.readyState == 4 && (pagecnx.status==200 || window.location.href.indexOf("http")==-1)) document.getElementById(id).innerHTML=pagecnx.responseText } function crearXMLHttpRequest() { var xmlHttp=null; if (window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); else if (window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); return xmlHttp; } |
| ||||
Re: Error con acentos con carga asíncrona Claro que puedes solucionar tu problema, simplemente implementa una función que convierta los carácteres latinos a sus respectivas entidades HTML, una opción sería esta función:
Código:
Esta función la aplicas de esta manera:function htmlent(txt) { txt = txt.replace(/á/g, "á"); txt = txt.replace(/é/g, "é"); txt = txt.replace(/í/g, "í"); txt = txt.replace(/ó/g, "ó"); txt = txt.replace(/ú/g, "ú"); txt = txt.replace(/ñ/g, "ñ"); return txt; }
Código:
Espero que te sirva. function setpage(pagecnx, id){ if (pagecnx.readyState == 4 && (pagecnx.status==200 || window.location.href.indexOf("http")==-1)) document.getElementById(id).innerHTML=htmlent(pagecnx.responseText); } |
| ||||
Re: Error con acentos con carga asíncrona ¡Muchisimas gracias por la solución! Es justo lo que necesitaba. |
| ||||
Re: Error con acentos con carga asíncrona Ya lo he probado. Es extraño, pero no me ha funcionado el código. Te dejo un link para que lo cheques y me digas si puse algo mal por favor, o si identificas el problema en caso sea solucionable. Gracias de nuevo... http://mx.geocities.com/daphyreweb/test/ |
| ||||
Re: Error con acentos con carga asíncrona El problema es que el objeto XMLhttpRequest al obtener el texto no reconoce los carácteres latinos, está de más esa función que te he dado porque de antemano el texto que se le pasa no contiene ningún carácter latino, en su lugar hay un cuadradito, que me parece que es un carácter que simplemente no se reconoce. Bien, tal y como lo planteas yo no encuentro manera de solucionarlo, pero me pregunto porqué tienes que ponerle carácteres con acentos si puedes usar las entidades html, cuando trabajas con php no hay problema porque utilizas la función htmlentities para tranformar los carácteres latinos a su respectiva entidad html, pero en tu caso trabajas solo con html, simplemente escribe todo con entidades. |
| ||||
Re: Error con acentos con carga asíncrona Creo que con entidades te refieres a los &;... Respondiendo a eso, pues la verdad es más sencillo escribirlo directo, pero al final supongo que tendré que usarlos aunque sea un poco más de trabajo. Y respecto al PHP, verás, que uso un servidor gratuito que no me lo permite. De cualquier forma, gracias por tu tiempo, me ayudó tambien a aprender más cosas sobre JavaScript y otros detalles. Gracias por todo. |
| ||||
Re: Error con acentos con carga asíncrona Hay servidores gratuitos que soportan PHP, solo búscalos si te hacen falta y sino pues usa el dream que genera automáticamente las entidades html (así se llaman, es su nombre oficial). |
| |||
Respuesta: Re: Error con acentos con carga asíncrona Prueba creando la funcion que propone ELjavista pero con estas sentencias: function htmlent(texto) { texto = texto.replace(/(\xF1)/g, 'n').replace(/(\xD1)/g, 'N'); texto = texto.replace(/(\xE1)/g, 'a').replace(/(\xC1)/g, 'A'); texto = texto.replace(/(\xE9)/g, 'e').replace(/(\xC9)/g, 'E'); texto = texto.replace(/(\xED)/g, 'i').replace(/(\xCD)/g, 'I'); texto = texto.replace(/(\xF3)/g, 'o').replace(/(\xD3)/g, 'O'); texto = texto.replace(/(\xFA)/g, 'o').replace(/(\xDA)/g, 'O'); return txt; } |