Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/02/2011, 08:47
Erickvk
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 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.