Cómo decodificar una URL
- Pega el texto codificado en URL o texto codificado.
- Deja Tratar + como espacio activado para query strings y datos de formulario, y desactívalo para rutas o valores Base64.
- Si el resultado todavía contiene secuencias
%XX, el estado te lo sugiere: marca Decodificar repetidamente. - Para un archivo de log o una columna de valores, marca Cada línea por separado para que cada línea se decodifique por su cuenta.
- Elige un Juego de caracteres si el origen no era UTF-8 y después pulsa Copiar salida.
Cuando la entrada es una URL completa, la tabla bajo los paneles muestra el esquema, el host, la ruta decodificada, cada parámetro de consulta en su propia fila y el fragmento. Es la forma más rápida de leer una URL larga de seguimiento o de redirección.
Ejemplos
| Codificado | Decodificado | Nota |
|---|---|---|
q=base64%20%26%20%22url-safe%22 | q=base64 & "url-safe" | %26 es &, %22 es " |
lang=%E6%97%A5%E6%9C%AC%E8%AA%9E | lang=日本語 | tres bytes por carácter en UTF-8 |
%F0%9F%98%80 | 😀 | los emoji ocupan cuatro bytes |
q=a+b%2Bc | q=a b+c | con Tratar + como espacio |
next=%252Fhome%253Ftab%253D1 | next=/home?tab=1 | doble codificación, dos rondas |
caf%E9 | café | Windows-1252 o ISO-8859-1, no UTF-8 |
Doble codificación
Cada vez que se vuelve a codificar una cadena ya codificada, cada % se convierte en %25. Así, / pasa a %2F, luego a %252F y luego a %25252F. Ocurre cuando una URL de redirección pasa por varios servicios, o cuando un framework codifica un valor que el código ya había codificado.
Para leer una cadena así, decodifica hasta que no queden escapes; Decodificar repetidamente lo hace e indica el número de rondas. Para corregir la causa, busca la capa que codifica por segunda vez. Una URL anidada legítimamente, como un parámetro next= o url= que contiene otra URL, necesita exactamente una capa extra y ninguna más.
Las pasarelas de seguridad del correo son una fuente habitual de este anidamiento. Una URL de Safe Links de Microsoft Defender tiene este aspecto: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fexample.com%2Freset%3Fid%3D42&data=…; pégala y la tabla de parámetros muestra el destino real, https://example.com/reset?id=42, sin que tengas que hacer clic en nada.
Escapes mal formados y juegos de caracteres antiguos
Un % debe ir seguido de exactamente dos dígitos hex. 100%, %zz o una URL cortada a mitad de un escape es un error, y el decodificador muestra Secuencia de escape rota en la posición N. decodeURIComponent de JavaScript lanza URIError: URI malformed en los mismos casos, mientras que unquote de Python deja la secuencia tal cual.
La otra fuente de errores es el juego de caracteres. Los escapes por porcentajes son bytes, y %E9 por sí solo no es UTF-8 válido. Python lo decodifica como el carácter de sustitución y JavaScript lanza una excepción. Con Juego de caracteres en Windows-1252 o ISO-8859-1 se decodifica como é. Shift_JIS, GBK, EUC-KR, KOI8-R y otros juegos de caracteres antiguos están en la misma lista.
Decodificar URL en código
decodeURIComponent("a%20b%26c") // "a b&c"
new URLSearchParams("q=a+b%2Bc").get("q") // "a b+c"
from urllib.parse import unquote, unquote_plus, parse_qs
unquote("caf%C3%A9") # 'café'
unquote("caf%E9", encoding="latin-1") # 'café'
unquote_plus("q=a+b%2Bc") # 'q=a b+c'
parse_qs("q=a+b%2Bc&tag=x&tag=y") # {'q': ['a b+c'], 'tag': ['x', 'y']}
decodeURIComponent no convierte + en espacio; URLSearchParams y unquote_plus sí. Elige la que corresponda a cómo se generó la cadena. Para codificar, consulta el codificador de URL, y para Base64 que llegó a través de una URL, el decodificador Base64URL.
Preguntas frecuentes
¿Cómo decodifico una cadena codificada como URL?
Pégala arriba; el texto decodificado aparece mientras escribes. En JavaScript usa decodeURIComponent(s), en Python urllib.parse.unquote(s), o unquote_plus(s) cuando + significa un espacio.
¿Por qué mi URL decodificada todavía contiene %20 o %3A?
Se codificó dos veces. Una ronda convierte %2520 en %20; una segunda da el espacio. Marca Decodificar repetidamente y el decodificador seguirá hasta que no queden escapes, con un máximo de cinco rondas, e indicará cuántas hicieron falta.
¿Por qué decodeURIComponent lanza URI malformed?
O bien un % no va seguido de dos dígitos hex, como en 100%, o bien los bytes no son UTF-8 válido, como %E9 procedente de un sistema Windows-1252. Este decodificador señala la posición exacta, y la opción Juego de caracteres decodifica las codificaciones antiguas.
¿Hay que decodificar + como espacio?
En las query strings y los cuerpos de formulario, sí, y por eso Tratar + como espacio está activado por defecto. En las rutas de URL y en valores que puedan contener Base64, desmárcalo, porque ahí + es un más literal.