Decodificar URL
Transforme %E2%9C%93 de volta em ✓. Strings codificadas duas vezes, codificação de formulário e entradas meio quebradas são tratadas, em vez de recusadas. Nada fica armazenado.
- Nunca armazenado
- Sem fila, sem espera
- Sem cadastro, sem marca d'água
Decodificado aparece aqui.
Como funciona
Cole o texto codificado
Uma URL inteira, uma query string ou apenas um valor.
Escolha o tipo, se precisar
Decodificação padrão, ou decodificação de formulário, em que + significa espaço. Se estiver em dúvida, a página mostra quando as duas dão resultados diferentes.
Copie o resultado
Decodifique de novo se o texto foi codificado duas vezes — o que é comum e fácil de perceber depois que você vê.
A ambiguidade que nada consegue resolver por você
Decodificar é mecanicamente simples — encontrar cada % seguido de dois dígitos hexadecimais, transformá-lo de volta em um byte e depois ler os bytes como UTF-8 — e tem exatamente uma ambiguidade real. Um sinal de mais pode significar um espaço, ou pode significar um mais. Em um formulário enviado, significa espaço, por uma convenção mais antiga que a própria especificação de URLs da web. Em um segmento de caminho, é um caractere literal. Nada no próprio texto diz qual vale, então a página mostra as duas leituras em vez de escolher uma e errar em silêncio — o que importa mais justamente no caso em que isso dói mais: um endereço de e-mail ou um valor Base64, em que o mais é dado de verdade.
Texto fora do ASCII chega como várias sequências de porcentagem por caractere, porque a codificação trabalha com bytes UTF-8, e não com caracteres: uma letra acentuada vira duas, a maioria dos símbolos três, um emoji quatro. Decodifique uma sequência que não é UTF-8 válido e você recebe caracteres de substituição — geralmente sinal de que o texto foi codificado a partir de outro conjunto de caracteres, ou de que foi cortado no meio de um caractere.
Decodificar duas vezes é uma falha de segurança, não apenas um engano. Se um valor é decodificado, verificado e depois decodificado de novo, um invasor consegue esconder caracteres da verificação: %252e%252e%252f passa por um filtro que procura “../” porque, depois de uma passada, ainda é %2e%2e%2f, e depois da segunda é exatamente o path traversal que o filtro deveria barrar. Decodifique exatamente uma vez, depois valide, e nunca na ordem inversa.
Texto que nunca foi codificado volta sem alterações, em vez de estragado, o que é o comportamento útil quando você não tem certeza se uma string precisa mesmo ser decodificada. Um sinal de porcentagem que não é seguido de dois dígitos hexadecimais fica como está, em vez de ser tratado como erro — é um porcento literal, comum em texto que foi colado, e não codificado.
Quando você precisa de outra coisa
No código, o decodificador deve combinar com o codificador. O JavaScript tem decodeURIComponent; o Python separa unquote de unquote_plus justamente por causa da questão do sinal de mais; o PHP tem rawurldecode e urldecode pelo mesmo motivo. Melhor ainda: deixe um tipo URL ou um parser de query string fazer isso — a maioria dos frameworks já decodifica os parâmetros para você, e decodificar de novo depois é exatamente como se escreve o bug de decodificação dupla descrito acima.
Para inspecionar uma URL longa, e não decodificar um valor, um parser é melhor que um decodificador: python -c "import urllib.parse,sys; print(urllib.parse.urlparse(sys.argv[1]))" separa um endereço em partes para você ver qual pedaço é qual antes de decodificar qualquer coisa, que costuma ser a pergunta real quando um link está se comportando mal.
Perguntas frequentes
Meu texto ainda tem %25 depois de decodificar
Então ele foi codificado duas vezes, o que é extremamente comum — acontece sempre que um valor já codificado é codificado de novo ao passar por um redirecionamento ou por uma camada de logs. %25 é a codificação do próprio caractere %, então a primeira decodificação transforma %2520 em %20, e a segunda transforma isso em um espaço. É só decodificar de novo. A página avisa quando identifica esse padrão.
O “+” deve virar espaço?
Depende de onde a string veio, e é por isso que é uma escolha, e não um palpite. Em um corpo application/x-www-form-urlencoded — um formulário HTML enviado — + significa espaço. Em um segmento de caminho, ou em dados que apenas passaram por uma URL, + é um sinal de mais literal, e transformá-lo em espaço corrompe o valor. Strings Base64 são o caso que mais dá problema: elas têm caracteres + de verdade, e decodificar uma como formulário a destrói.
O que acontece com uma string quebrada?
Ela decodifica o que dá e deixa o resto como está, em vez de recusar tudo. Um % solto que não faz parte de um escape válido — comum quando o texto já foi parcialmente decodificado, ou foi cortado — faz o próprio decodificador do navegador gerar um erro e não devolver nada. Aqui, todo escape válido é decodificado e os caracteres soltos ficam como estão, o que é muito mais útil quando você está tentando ler uma linha de log quebrada.
Meu texto fica armazenado em algum lugar?
Não. Nada fica armazenado e nenhuma requisição é feita. Você pode se desconectar da internet depois que a página carregar, e ela continua funcionando.
Posso decodificar uma URL inteira de uma vez?
Sim. Cole tudo — a estrutura continua legível e só as partes codificadas voltam a ser texto, então uma URL longa com vários parâmetros codificados vira algo que você realmente consegue ler.
Bom saber: O sinal de mais é ambíguo: em uma query string ele significa espaço, e em um caminho significa um mais literal. A página decodifica das duas formas e mostra qual é qual em vez de adivinhar. Texto que nunca foi codificado com percent-encoding volta sem alterações, em vez de estragado.
Coloque esta ferramenta no seu site
Grátis para qualquer blog, página de turma ou artigo de ajuda. Cole um único trecho de código e seus visitantes podem usá-la direto na sua página.
Mais Ferramentas para desenvolvedores
Codificar URL
Deixe o texto seguro para colocar em uma URL
Decodificar Base64
Transforme Base64 de volta em texto ou arquivo
Formatador JSON
Deixe JSON ilegível fácil de ler
Decodificador JWT
Veja o que há dentro de um token, com privacidade
Gerador de QR Code
Um QR Code que continua sendo seu
Gerador de código de barras
EAN, UPC, Code 128 — com os dígitos verificados