Como decodificar uma URL
- Cole o texto codificado em URL ou texto codificado.
- Deixe Tratar + como espaço ligado para query strings e dados de formulário, e desligue para caminhos ou valores em Base64.
- Se o resultado ainda tiver sequências
%XX, o status avisa: marque Decodificar repetidamente. - Para um arquivo de log ou uma coluna de valores, marque Cada linha separadamente para que cada linha seja decodificada isoladamente.
- Escolha um Charset se a origem não era UTF-8 e depois clique em Copiar saída.
Quando a entrada é uma URL completa, a tabela abaixo dos painéis mostra o esquema, o host, o caminho decodificado, cada parâmetro de query em sua própria linha e o fragmento. É o jeito mais rápido de ler uma URL longa de rastreamento ou de redirecionamento.
Exemplos
| Codificado | Decodificado | Observação |
|---|---|---|
q=base64%20%26%20%22url-safe%22 | q=base64 & "url-safe" | %26 é &, %22 é " |
lang=%E6%97%A5%E6%9C%AC%E8%AA%9E | lang=日本語 | três bytes por caractere em UTF-8 |
%F0%9F%98%80 | 😀 | emojis ocupam quatro bytes |
q=a+b%2Bc | q=a b+c | com Tratar + como espaço |
next=%252Fhome%253Ftab%253D1 | next=/home?tab=1 | codificação dupla, duas rodadas |
caf%E9 | café | Windows-1252 ou ISO-8859-1, não UTF-8 |
Codificação dupla
Toda vez que uma string já codificada é codificada de novo, cada % vira %25. Assim, / vira %2F, depois %252F, depois %25252F. Isso acontece quando uma URL de redirecionamento passa por vários serviços, ou quando um framework codifica um valor que o código já tinha codificado.
Para ler uma string assim, decodifique até não sobrar nenhum escape; Decodificar repetidamente faz isso e informa o número de rodadas. Para corrigir a causa, encontre a camada que codifica uma segunda vez. Uma URL aninhada de propósito, como um parâmetro next= ou url= que contém outra URL, precisa de exatamente uma camada extra, e não mais.
Gateways de segurança de e-mail são uma fonte comum desse aninhamento. Uma URL do Microsoft Defender Safe Links tem a cara de https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fexample.com%2Freset%3Fid%3D42&data=…; cole-a e a tabela de parâmetros mostra o destino real, https://example.com/reset?id=42, sem que você precise clicar em nada.
Escapes malformados e charsets legados
Um % precisa ser seguido de exatamente dois dígitos hex. 100%, %zz ou uma URL cortada no meio de um escape é um erro, e o decodificador mostra Escape quebrado na posição N. O decodeURIComponent do JavaScript lança URIError: URI malformed nos mesmos casos, enquanto o unquote do Python deixa a sequência como está.
A outra fonte de erros é o charset. Escapes percentuais são bytes, e %E9 sozinho não é UTF-8 válido. O Python o decodifica como o caractere de substituição, o JavaScript lança um erro. Com o Charset em Windows-1252 ou ISO-8859-1, ele vira é. Shift_JIS, GBK, EUC-KR, KOI8-R e outros charsets legados estão na mesma lista.
Decodificar URL no 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']}
O decodeURIComponent não transforma + em espaço; URLSearchParams e unquote_plus transformam. Escolha a função que corresponde a como a string foi gerada. Para codificar, veja o codificador de URL, e para Base64 que chegou por uma URL, o decodificador Base64URL.
Perguntas frequentes
Como decodificar uma string codificada em URL?
Cole acima; o texto decodificado aparece enquanto você digita. Em JavaScript use decodeURIComponent(s), em Python urllib.parse.unquote(s), ou unquote_plus(s) quando o + representa um espaço.
Por que minha URL decodificada ainda tem %20 ou %3A?
Ela foi codificada duas vezes. Uma rodada transforma %2520 em %20; a segunda rodada entrega o espaço. Marque Decodificar repetidamente e o decodificador continua até não sobrar nenhum escape, em até cinco rodadas, e informa quantas foram necessárias.
Por que o decodeURIComponent lança URI malformed?
Ou um % não é seguido de dois dígitos hex, como em 100%, ou os bytes não são UTF-8 válido, como %E9 vindo de um sistema Windows-1252. Este decodificador aponta a posição exata, e a opção Charset decodifica codificações legadas.
O + deve ser decodificado como espaço?
Em query strings e corpos de formulário, sim, por isso Tratar + como espaço vem ligado por padrão. Em caminhos de URL e em valores que podem conter Base64, desmarque, porque ali o + é um sinal de mais literal.