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.