Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Diseño web (http://www.forosdelweb.com/f91/)
-   -   Error con acentos con carga asíncrona (http://www.forosdelweb.com/f91/error-con-acentos-con-carga-asincrona-572988/)

daPhyre 05/04/2008 21:42

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?

ElJavista 06/04/2008 12:43

Re: Error con acentos con carga asíncrona
 
A ver, aquí falta un dato, estás trabajando con el objeto xmlHttpRequest y PHP? como lo haces? Si es con PHP hay una solución, todo el contenido que se imprime aplícale la función urlencode, eso hará que el contenido esté con código url, después en JavaScript a aplicas ese contenido la función unescape y luego lo usas para mostrar el contenido. Espero que te sirva.

daPhyre 06/04/2008 19:42

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:

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;
}

¿Puedo solucionar mi problema?

ElJavista 07/04/2008 14:51

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:

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;
}

Esta función la aplicas de esta manera:

Código:

function setpage(pagecnx, id){
        if (pagecnx.readyState == 4 && (pagecnx.status==200 || window.location.href.indexOf("http")==-1))
        document.getElementById(id).innerHTML=htmlent(pagecnx.responseText);
}

Espero que te sirva.

daPhyre 08/04/2008 09:13

Re: Error con acentos con carga asíncrona
 
¡Muchisimas gracias por la solución! Es justo lo que necesitaba.

daPhyre 09/04/2008 10:28

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/

ElJavista 09/04/2008 14:08

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.

daPhyre 09/04/2008 19:04

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.

ElJavista 10/04/2008 17:01

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).

frajagon 21/02/2011 08:33

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;
}


La zona horaria es GMT -6. Ahora son las 20:44.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.