Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

304
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!