Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

302
Vistas
¿Por qué %fd es una cadena no válida para la decodificación de URL?

¿Por qué la cadena %e9 o %fd no es válida para decodificar usando decodeURIComponent de Javascript?

Estos caracteres aparecen en medio de una cadena y no puedo entender dónde está el problema. Son caracteres hexadecimales válidos.

Cadena completa (esto es parte de una cadena enviada por la aplicación del cliente al servidor y que estaba siendo bloqueada por modsec):

 %61%e9%3d%36%7f%00%00%01%00%00%43%fd%a1%5a%00%00%00%43

Muestra para decodificar:

 decodeURIComponent("%61%e9%3d%36%7f%00%00%01%00%00%43%fd%a1%5a%00%00%00%43")

Error:

 VM222:1 Uncaught URIError: URI malformed at decodeURIComponent (<anonymous>) at <anonymous>:1:1

Estoy usando estas dos funciones para codificar base64 y decodificar desde base64 (desde aquí: Mozilla ):

 function c64(t) { return btoa(encodeURIComponent(t).replace(/%([0-9A-F]{2})/g, (match, p1) => { return String.fromCharCode('0x' + p1); })); } function d64(t) { return decodeURIComponent(atob(t).split('').map(function (c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); }).join('')); }

La cadena original está en base64:

 d64("Yek9Nn8AAAEAAEP9oVoAAABDYek9Nn8AAAEAAEP9oVoAAABD")

devoluciones:

 ...js:1 Uncaught URIError: URI malformed at decodeURIComponent (<anonymous>)
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Esto se debe a que la representación Unicode de ese carácter en codificación hexadecimal no es "%e9" ni "%E9" .

Comience escribiendo en la consola: "\u00e9" o "\u00E9"

que es % reemplazado por "\u00" en su ejemplo. Conseguirás:

'é'

Puede verificar esto ejecutando:

escape('é') //"%E9".

ahora corre

encodeURIComponent('é')

y obtendrá "%C3%A9" no "%E9" . Esto se debe a que encodeURIComponent devuelve un volcado hexadecimal de bytes. Si el carácter es de 2 bytes, obtiene %xx%yy , si es de 3 bytes, obtiene %xx%yy%zz .

Prueba esto con "€" . Primero haz:

escape("€")

, obtendrá '%u20AC' o lo mismo que "\u20AC" .

Para obtener el volcado hexadecimal de su código de bytes, ejecute:

encodeURIComponent("€") y obtendrá '%E2%82%AC' .

Este ejemplo del artículo 'UTF-8' de Wikipedia explica en detalle cómo se calcula '%E2%82%AC' . Es el volcado hexadecimal de 11100010 10000010 10101100 .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda