2012-01-30 12 views
29

que entró en el siguiente en la consola de Chrome:Javascript decodeURI (Componente) malformación excepción uri

decodeURIComponent('a%AFc'); 

En lugar de dar como resultado a a0xAFc, que causó una excepción URIError (URI con formato incorrecto).

He escuchado varias excusas de por qué esto es posible, pero lo que no entiendo es ¿por qué?

Se supone que la función decodeURIComponent() en particular decodifica datos, no verifica el URI.

Respuesta

37

%AF no es un personaje en su propia sino que forma parte de la secuencia Unicode (MACRON - %C2%AF).

%AF no fue fabricado por encodeURIComponent pero algo como escape, entonces puede ser decodificado por unescape.

Lo que probablemente necesita es decodeURIComponent('%C2%AF')

+2

me lo he inventado después de que trató la decodificación de una carga de texto codificado, fracasado y se dio cuenta que sería ahogarse con ese personaje en particular. Tal vez 'unescape' es lo que necesito. – Christian

+1

@ChristianSciberras 'encodeURIComponent()' suele ser una mejor opción porque funciona con UTF-8. Sin embargo, '0xAF' en sí mismo no es una secuencia de caracteres codificada en UTF-8 válida. Es por eso que tu código no funciona. Espero que esté más claro ahora. – duri

+3

Entonces, ¿qué ocurre si necesito manejar entradas con codificación porcentual ASCII/iso-8859-1? 'unescape' está en desuso, y tampoco hay' unescapeURI' – felixfbecker

Cuestiones relacionadas