Foros del Web » Creando para Internet » HTML »

Problemilla con los pop-up en firefox

Estas en el tema de Problemilla con los pop-up en firefox en el foro de HTML en Foros del Web. Tengo un problema con firefox con los caracteres raros. Cuando la pagina padre envia un parametro y ese parametro su contenido por ejemplo tiene un ...
  #1 (permalink)  
Antiguo 28/02/2011, 03:24
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 17 años, 2 meses
Puntos: 8
Problemilla con los pop-up en firefox

Tengo un problema con firefox con los caracteres raros. Cuando la pagina padre envia un parametro y ese parametro su contenido por ejemplo tiene un acento, el navegador no lo interpreta bien y lo convierte en un caracter extraño.

He probado a cambiar a codigo Ascii pero esa solucion no me vale porque me lo cambia por & y la url lo interpreta que quieres enviar otro parametro.

Alguna solución, gracias por las molestias.

PD: Estoy usando una jsp pero el problema creo que esta en el HTML o javascript que estoy usando no en el codigo java de la pagina.
  #2 (permalink)  
Antiguo 28/02/2011, 05:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Problemilla con los pop-up en firefox

buenas...

el tema puede ser tan sencillo como complejo. sencillo porque la solucion es facil. es un tanto complejo si analizariamos las documentaciones oficiales mas las caracteristicas de los navegadores.

Cita:
[...] problema con firefox con los caracteres raros [...] la pagina padre envia un parametro y ese parametro su contenido por ejemplo tiene un acento [...]
es normal que suceda porque la URI tiene un esquema definido donde tiene un listado de caracteres a mostrar literalmente y otros tantos estan reservados porque tienen un significado especial. cuando un caracter se encuentra fuera de ese rango, el caracter se tiene que codificar o escapar. la solucion es simplemente revertir el proceso con funciones especializadas como unescape o decodeURI. aqui es donde se pone un poco complejo e interesante. no voy a entrar en mucho detalle... basicamente -segun el estandar ECMA-262- los caracteres fuera del rango son codificados en utf-8. por alguna razon obtengo resultados distintos en firefox e iexplorer. en firefox, cuando el caracter tiene un valor code point (de utf-16) entre 127-255, en lugar codificarlo a utf-8 lo codifica en iso-8859-1 (latin-1). cuando el code point excede el valor 255, los caracteres son codificado en utf-8. en chrome no encuentro este aspecto, siempre lo codifica en utf-8. iexplorer es otra historia, los caracteres no sufren ninguna codificacion -al menos en la version 8.

ahora viene lo bueno. en algunas referencia he leido que la funcion unescape esta desaprobada en favor a decodeURI y decodeURIComponent. se utiliza igual que unescape, solo que el string debe estar codificado en utf-8 cuando sea aplicable. eso significa que en firefox tendrias problema al decodificar los parametros si estos estan codificado en iso-8859-1. con unescape no tendrias este problema pero... ¿que sucede si utilizas unescape cuando los parametros estan codificado en utf-8? entonces obtendrias la representacion incorrecta de los caracteres. a continuacion una simple prueba.

Código:
// string codificado en iso-8859-1 ;
unescape("Jos%E9%20Mayag%FCezano"); // José Mayagüezano
decodeURI("Jos%E9%20Mayag%FCezano"); // error del tipo malformed URI sequence

// string codificado en utf-8 ;
unescape("Jos%C3%A9%20Mayag%C3%BCezano"); // José Mayagüezano
decodeURI("Jos%C3%A9%20Mayag%C3%BCezano"); // José Mayagüezano
¿cual es la mejor manera de mantener integridad entre los navegadores? antes de agregar los parametros a la URL, codifica el string con encodeURI; al extraer los parametros lo decodificas con decodeURI.

Cita:
[...] He probado a cambiar a codigo Ascii pero esa solucion no me vale porque me lo cambia por & y la url lo interpreta que quieres enviar otro parametro.
si bien entiendo, cuando dices codigo ASCII supongo que te refieres a las entidades html. en tal caso, las URIs no comprenden lo que son entidades html. de ahi que tienes el problema que te lo interpreta como otro parametro.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 28/02/2011, 08:47
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 17 años, 2 meses
Puntos: 8
Respuesta: Problemilla con los pop-up en firefox

Cita:
Iniciado por zerokilled Ver Mensaje
buenas...

el tema puede ser tan sencillo como complejo. sencillo porque la solucion es facil. es un tanto complejo si analizariamos las documentaciones oficiales mas las caracteristicas de los navegadores.



es normal que suceda porque la URI tiene un esquema definido donde tiene un listado de caracteres a mostrar literalmente y otros tantos estan reservados porque tienen un significado especial. cuando un caracter se encuentra fuera de ese rango, el caracter se tiene que codificar o escapar. la solucion es simplemente revertir el proceso con funciones especializadas como unescape o decodeURI. aqui es donde se pone un poco complejo e interesante. no voy a entrar en mucho detalle... basicamente -segun el estandar ECMA-262- los caracteres fuera del rango son codificados en utf-8. por alguna razon obtengo resultados distintos en firefox e iexplorer. en firefox, cuando el caracter tiene un valor code point (de utf-16) entre 127-255, en lugar codificarlo a utf-8 lo codifica en iso-8859-1 (latin-1). cuando el code point excede el valor 255, los caracteres son codificado en utf-8. en chrome no encuentro este aspecto, siempre lo codifica en utf-8. iexplorer es otra historia, los caracteres no sufren ninguna codificacion -al menos en la version 8.

ahora viene lo bueno. en algunas referencia he leido que la funcion unescape esta desaprobada en favor a decodeURI y decodeURIComponent. se utiliza igual que unescape, solo que el string debe estar codificado en utf-8 cuando sea aplicable. eso significa que en firefox tendrias problema al decodificar los parametros si estos estan codificado en iso-8859-1. con unescape no tendrias este problema pero... ¿que sucede si utilizas unescape cuando los parametros estan codificado en utf-8? entonces obtendrias la representacion incorrecta de los caracteres. a continuacion una simple prueba.

Código:
// string codificado en iso-8859-1 ;
unescape("Jos%E9%20Mayag%FCezano"); // José Mayagüezano
decodeURI("Jos%E9%20Mayag%FCezano"); // error del tipo malformed URI sequence

// string codificado en utf-8 ;
unescape("Jos%C3%A9%20Mayag%C3%BCezano"); // José Mayagüezano
decodeURI("Jos%C3%A9%20Mayag%C3%BCezano"); // José Mayagüezano
¿cual es la mejor manera de mantener integridad entre los navegadores? antes de agregar los parametros a la URL, codifica el string con encodeURI; al extraer los parametros lo decodificas con decodeURI.


si bien entiendo, cuando dices codigo ASCII supongo que te refieres a las entidades html. en tal caso, las URIs no comprenden lo que son entidades html. de ahi que tienes el problema que te lo interpreta como otro parametro.

Muchas gracias. Por la ayuda.

Etiquetas: firefox, pop-up
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




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