En la respuesta a otra pregunta me di cuenta de que mi Javascript/DOM conocimiento se había convertido en un poco fuera de fecha en la que todavía estoy usando escape/unescape para codificar el contenido de los componentes de la dirección URL, mientras que parece que me ahora debe utilizar encodeURIComponent/decodeURIComponent lugar.

Lo que quiero saber es lo que está mal con escape/unescape ? Hay algunas vagas sugerencias que hay algún tipo de problema en torno a los caracteres Unicode, pero no puedo encontrar ninguna explicación definitiva.

Mi experiencia en la web es bastante sesgada, casi todo ha sido escrito grandes Intranet aplicaciones atado a Internet Explorer. El que ha involucrado a un montón de uso de escape/unescape y las aplicaciones involucradas tienen totalmente compatible con Unicode para muchos años.

Entonces, ¿qué son las Unicode problemas que escape/unescape se supone que tienen ? ¿Alguien tiene alguno de los casos de prueba para demostrar los problemas ?

  • Creo que esta artículo cubre bastante bien
  • Excelente, justo lo que yo quería. Veo que el problema es que Mozilla no lidiar con Unicode en el escape, lo que explica por qué no he de ejecutar cualquier tipo de problemas con el uso de IE sólo de la aplicación.
  • Me siento bendecido y maldecido por mi historial de trabajo con IE sólo Intranet aplicaciones. Feliz porque yo nunca tienen que lidiar con IE/FF diferencias y maldecido por la misma razón.
  • Mozilla y IE ambos hacen de la misma (curioso) cosa que con Unicode, incluso si la documentación no la mencionan.
  • Chrome también luchas con Unicode cuando se utiliza (de la onu)de escape…
  • Sé que las reglas eran diferentes cuando se publicó este, pero link sólo respuestas son mal visto hoy en día y son eliminados. Sin embargo, ya que van a perder una gran cantidad de la eliminación de esta respuesta, me gustaría ofrecerle la posibilidad de guardar por la edición para incluir más información sobre el tema. (tal vez un resumen de lo que está en el otro lado del enlace) Gracias.

InformationsquelleAutor andynormancx | 2009-03-06

4 Comentarios

  1. 41

    Lo que quiero saber es lo que está mal con el escape/unescape ?

    Que no está «mal», como tales, son sólo su propia cadena de formato que se parece un poco a URI-parámetros de codificación, pero en realidad no lo es. En particular:

    • ‘+’ significa plus, no el espacio
    • hay un especial de «%uNNNN» formato para la codificación Unicode UTF-16 puntos de código, en lugar de la codificación UTF-8 bytes

    Así que si usted utiliza escape() para crear URI valores de los parámetros que se reciben malos resultados para las cadenas que contienen un plus, o todos los caracteres no ASCII.

    de escape() podría ser utilizado como un interno JavaScript esquema de codificación, por ejemplo, para escapar de los valores de «cookies». Sin embargo, ahora que todos los navegadores soportan encodeURIComponent (que no era originalmente el caso), no hay ninguna razón para utilizar escapar de preferencia a que.

    Sólo hay un uso moderno de escape/unescape que yo sepa, y eso es como una manera rápida de implementar un UTF-8 codificador/decodificador, mediante el aprovechamiento de la codificación UTF-8 de procesamiento en URIComponent manipulación:

    utf8bytes= unescape(encodeURIComponent(unicodecharacters));
    unicodecharacters= decodeURIComponent(escape(utf8bytes));
    • Una gran referencia: unixpapa.com/js/querystring.html – en desuso de escape/unescape, tonto encodeURI/decodeURI y decodeURIComponent/encodeURIComponent – peculiaridades y cómo usarlo. decodeURIComponent no convertir «+» al espacio.
    • escape de escape de una sola cotización, mientras que encodeURI no. Lo que la hace inútil para mi proyecto.
    • bobince – actualmente estoy usando exactamente que enfoque para obtener el utf8bytes= unescape(encodeURIComponent(unicodecharacters)); ¿cómo puedo lograr el mismo resultado después de navegadores dejar de apoyar unescape método? Gracias.
    • en última instancia, algo así como el TextEncoder/TextDecoder Api de w3.org/TR/encoding. Apoyo no está allí ahora y aunque yo no me preocuparía por escapar/unescape va a desaparecer por un largo tiempo.
  2. 9

    escape sólo opera sobre los caracteres en el rango de 0 a 255 inclusive (ISO-8859-1, que es, efectivamente, puntos de código unicode representable con un solo byte). (*)

    encodeURIComponent funciona para todas las cadenas de javascript puede representar (que es el rango completo de unicode del plano multilingüe básico, i e puntos de código unicode 0 a 1,114,111 o 0x10FFFF que cubren casi cualquier humano sistema de escritura en el uso actual).

    Ambas funciones producen url segura cadenas que sólo el uso de puntos de código de 0 a 127 inclusiva (US-ASCII), la cual éste se realiza por primera codificación de la cadena como UTF-8 y, a continuación, aplicar el %XX hexagonal de codificación familiar a partir de escape, a cualquier punto de código que no sería url segura.

    Esto es cierto ¿por qué se puede hacer una de dos funcall UTF-8 codificador/decodificador en javascript sin ningún tipo de bucles o de la generación de basura, mediante la combinación de estos primitivos para cancelar todos, pero el UTF-8-procesamiento de efectos secundarios, como la unescape y decodeURIComponent versiones de hacer lo mismo a la inversa.

    (*) Pie nota: Algunos navegadores modernos como Google Chrome han sido ajustados para producir %uXXXX para el de arriba-255 rango de caracteres de escape no fue definido originalmente, pero el servidor web de soporte para la decodificación de que la codificación no es tan bien implementados, como la decodificación de la IETF estándar UTF-8 codificación.

  3. 5

    Otro «moderno» uso me he topado es analizar un URI cadena codificada que puede incluir no válidos UTF8 secuencias de bytes. En ciertos casos decodeURIComponent puede lanzar una excepción. Usted puede necesitar para capturar esta excepción y volver a usar unescape.

    Un ejemplo sería «tür’ codificados como ‘t%FCr’ que he visto Firefox producir (cuando los personajes se pegan en la barra de direcciones después de el ?).

    • Parece que el error fue corregido en Firefox. Sin embargo, no es raro que algunas personas erróneamente codificar los caracteres utilizando ISO-8859-1 en lugar de UTF-8.

Dejar respuesta

Please enter your comment!
Please enter your name here