Codifique ou decodifique qualquer texto de URL
Codifique em porcentagem um valor de consulta, um segmento de caminho ou uma URL inteira, ou transforme sequências %XX de volta em texto legível. Suporta UTF-8, espaços com + no estilo de formulário e um valor por linha. Nada sai do seu navegador.
Como codificar ou decodificar uma URL
- Cole o texto, o valor ou a URL na caixa de entrada.
- Escolha o tipo de codificação. Para um único valor de consulta ou segmento de caminho, mantenha Componente. Para um endereço inteiro em que só os espaços e as letras fora do ASCII precisam de conserto, escolha URL completa. Para dados que serão lidos como o envio de um formulário HTML, escolha Formulário.
- Clique em Codificar ou Decodificar. Com Um valor por linha marcado, cada linha é processada separadamente, então dá para converter de uma vez uma lista inteira de parâmetros ou de URLs.
- Copie o resultado ou clique em Usar o resultado como entrada para rodar de novo, por exemplo para desfazer um valor codificado duas vezes.
Ao decodificar uma URL completa que tem consulta, a ferramenta também lista o nome e o valor de cada parâmetro em texto simples, o jeito mais rápido de ler uma URL longa de rastreamento ou de redirecionamento.
O que é a codificação por porcentagem
Uma URL só pode conter um conjunto limitado de caracteres ASCII, e vários deles têm função: ? abre a consulta, & separa parâmetros, # abre o fragmento e / separa segmentos do caminho. A codificação por porcentagem é a forma de fazer entrar tudo o mais. Cada caractere é convertido nos seus bytes UTF-8 e cada byte é escrito como % mais dois dígitos hexadecimais. O espaço é um byte, então vira %20; o é tem dois bytes, %C3%A9; um emoji como 😀 tem quatro, %F0%9F%98%80. Decodificar faz o caminho inverso.
As regras vêm da RFC 3986, seção 2 (em inglês), o padrão que define a sintaxe de URIs. Ela recomenda dígitos hexadecimais em maiúsculas (%3A, não %3a), diz que o texto deve virar bytes UTF-8 antes de ser codificado e avisa que as implementações não devem codificar nem decodificar a mesma string mais de uma vez.
Caracteres reservados e não reservados (RFC 3986)
A RFC 3986 divide os caracteres que uma URL pode conter em dois grupos:
- Não reservados: letras
A–Z a–z, dígitos0–9e- . _ ~. Nunca precisam de codificação e significam a mesma coisa codificados ou não. - Reservados: os delimitadores gerais
: / ? # [ ] @e os subdelimitadores! $ & ' ( ) * + , ; =. Eles podem carregar estrutura, então, sempre que um deles fizer parte dos seus dados e não da sintaxe da URL, precisa ser codificado por porcentagem.
Todo o resto, incluindo espaços, o próprio %, aspas, sinais de menor e maior e qualquer caractere fora do ASCII, não é permitido numa URL como está e sempre precisa de codificação. Os mais comuns:
| Caractere | Codificado | Por que importa |
|---|---|---|
| espaço | %20 (ou + em dados de formulário) | Não é permitido em URLs |
& | %26 | Abriria um novo parâmetro de consulta |
= | %3D | Separaria o nome do parâmetro do valor |
? | %3F | Abriria a string de consulta |
# | %23 | Mandaria tudo o que vem depois para o fragmento, que nunca é enviado ao servidor |
/ | %2F | Criaria um segmento de caminho a mais |
+ | %2B | É lido como espaço em consultas codificadas como formulário |
% | %25 | Seria lido como o começo de uma sequência de escape |
: @ | %3A %40 | Delimitam esquema, credenciais e host |
é | %C3%A9 | Fora do ASCII, codificado nos seus dois bytes UTF-8 |
Componente, URL completa, RFC 3986 ou formulário: qual usar
A mesma entrada é codificada de modos diferentes conforme o destino do resultado. Para a entrada Tom & Jerry's (2024)/ü:
- Componente dá
Tom%20%26%20Jerry's%20(2024)%2F%C3%BC. É oencodeURIComponentdo JavaScript, que codifica tudo, exceto letras, dígitos e- _ . ! ~ * ' ( ). Use para um valor de consulta, um segmento de caminho ou uma URL que você vai colocar dentro do parâmetro de outra URL, como o destino de um redirecionamento. - RFC 3986 estrito dá
Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BC. Também codifica! ' ( ) *, que a RFC 3986 reserva como subdelimitadores mesmo que oencodeURIComponentos deixe em paz. Use quando um analisador rigoroso ou um esquema de assinatura de requisições esperar exatamente o conjunto da RFC. - Formulário dá
Tom+%26+Jerry%27s+%282024%29%2F%C3%BC. Segue o formato application/x-www-form-urlencoded do padrão WHATWG URL (em inglês): só letras, dígitos e* - . _ficam como estão, e o espaço vira+. É o que um formulário HTML e oURLSearchParamsenviam. - URL completa dá
Tom%20&%20Jerry's%20(2024)/%C3%BC. É oencodeURI, que deixa; / ? : @ & = + $ , #em paz porque presume que eles já cumprem a função numa URL completa. Use só para arrumar um endereço inteiro que tenha espaços ou texto fora do ASCII. Nunca use para um valor: um&dentro de um valor abriria um novo parâmetro sem avisar.
%20 ou +: espaços em URLs
Duas convenções convivem. Na sintaxe de URL da RFC 3986, o espaço é sempre %20 e o + é só um sinal de mais. No formato de formulário que os navegadores usam ao enviar um formulário por GET, o espaço é escrito como +, e o analisador WHATWG desse formato troca todo + por espaço antes de decodificar as porcentagens. Assim, ?q=a+b significa «a b» para um analisador de dados de formulário, enquanto /a+b num caminho significa «a+b».
Por isso o decodificador tem a opção Tratar + como espaço. Marque-a para consultas geradas por formulários, caixas de busca e a maioria das ferramentas de análise. Deixe desmarcada para caminhos e para valores em que o sinal de mais é de verdade, como um e-mail do tipo nome+etiqueta@example.com, que é codificado como nome%2Betiqueta%40example.com.
A mesma coisa em código
- JavaScript:
encodeURIComponent()edecodeURIComponent()para valores,encodeURI()para URLs inteiras eURLSearchParamspara consultas no estilo de formulário, com espaços em+(veja o MDN). - Python:
urllib.parse.quote()deixa a/sem codificar por padrão e escreve os espaços como%20, para caminhos;quote_plus()codifica a/e escreve os espaços como+, para valores de formulário (veja a documentação do Python). - PHP:
rawurlencode()segue a RFC 3986 e escreve os espaços como%20;urlencode()escreve os espaços como+(veja o manual do PHP).
Problemas comuns de codificação de URL
Codificação dupla: %2520 em vez de %20
Se uma URL contém %2520, %253A ou algo parecido, alguma coisa codificou uma string já codificada; %25 é o sinal de porcentagem codificado. Decodifique uma vez e confira o resultado. A ferramenta avisa quando um resultado decodificado ainda tem sequências de porcentagem, e Usar o resultado como entrada deixa você decodificar a camada seguinte. A correção no código é codificar cada valor exatamente uma vez, na hora de montar a URL.
Erros de «Malformed URI sequence»
Decodificadores rigorosos rejeitam um % que não é seguido de dois dígitos hexadecimais e sequências de bytes que não são UTF-8 válido. Este decodificador é tolerante: decodifica cada sequência válida, deixa um % solto como está, troca bytes inválidos pelo caractere de substituição � e avisa que fez isso, para você achar o ponto quebrado em vez de não receber nada.
Um valor que é cortado no # ou no &
Se um parâmetro chega truncado, o valor continha um # ou um & sem codificar, em geral porque a URL foi montada por concatenação de strings ou com a codificação de URL completa. Codifique o valor no modo Componente.
Codificar a URL inteira quebra o link
Passar uma URL completa pelo modo Componente transforma https:// em https%3A%2F%2F. Isso só está certo se a URL for, ela mesma, o valor de um parâmetro dentro de outra URL. Caso contrário, codifique só a parte que você está inserindo ou use o modo URL completa.
Outras ferramentas de URL
Monte links de campanha completos com o gerador de UTM, tire parâmetros de rastreamento com o limpador de URLs ou veja cada salto de um link com o verificador de redirecionamento. Para empacotar um script como um favorito de um clique, o gerador de bookmarklets codifica o código por porcentagem para você. E se você salva páginas de referência, como a RFC, enquanto trabalha, o Marqly as guarda em uma única biblioteca pesquisável; veja o Marqly para desenvolvedores.
Perguntas frequentes
O que faz a codificação de URL?
Ela troca os caracteres inseguros ou que têm função dentro de uma URL por um sinal de porcentagem seguido de dois dígitos hexadecimais para cada byte UTF-8. Um espaço vira %20, o & vira %26 e o é vira %C3%A9. Assim qualquer texto pode viajar dentro de uma URL sem ser confundido com a estrutura da própria URL.
Qual é a diferença entre encodeURI e encodeURIComponent?
O encodeURIComponent codifica tudo, exceto letras, dígitos e - _ . ! ~ * ' ( ), então é a escolha certa para um valor de consulta ou um segmento de caminho. O encodeURI também deixa ; / ? : @ & = + $ , # intactos, porque presume que você está passando uma URL completa e já estruturada. Use o modo Componente para valores e o modo URL completa só para endereços inteiros.
O espaço deve ser %20 ou +?
Os dois estão certos, em lugares diferentes. O %20 funciona em qualquer ponto de uma URL. O sinal + só significa espaço em consultas codificadas como formulário (application/x-www-form-urlencoded), que é o que os formulários HTML e o URLSearchParams produzem. Em um caminho, o + é um sinal de mais de verdade. Ao decodificar uma consulta que veio de um formulário, marque Tratar + como espaço.
Por que a minha URL tem %2520?
Ela foi codificada duas vezes. Na primeira passada, o espaço virou %20; na segunda, o próprio % foi codificado como %25, o que dá %2520. A RFC 3986 diz que a mesma string não deve ser codificada nem decodificada mais de uma vez. Decodifique uma vez para ver se volta o %20 e depois decodifique de novo.
Dá para codificar ou decodificar várias URLs de uma vez?
Dá. Cole um valor por linha e mantenha Um valor por linha marcado. Cada linha é codificada ou decodificada separadamente, e as quebras de linha são preservadas em vez de virar %0A.
Quais caracteres precisam ser codificados?
Tudo o que estiver fora do conjunto não reservado da RFC 3986 (letras, dígitos, hífen, ponto, sublinhado e til) precisa ser codificado quando faz parte de um valor, e não da estrutura da URL. Isso inclui espaços, letras fora do ASCII, o %, e delimitadores reservados como ? # & = / : @ e +.
O meu texto é enviado para algum servidor?
Não. A codificação, a decodificação e a lista de parâmetros da consulta rodam no seu navegador, com funções nativas do JavaScript. Nada é enviado a um servidor.





