Codificar e Decodificar URL Online

Converta caracteres especiais para a forma segura em URL e de volta. O único que codifica o domínio com Punycode em vez de quebrá-lo.

O que é codificação de URL?

A codificação de URL, também chamada de codificação percentual, substitui os caracteres que não podem viajar como estão num endereço web por um sinal de porcentagem seguido de dois dígitos hexadecimais. O espaço vira %20 e o cedilha vira %C3%A7.

Ela é necessária porque uma URL só aceita um conjunto reduzido de caracteres: letras sem acento de A a Z, algarismos e uns poucos símbolos. Todo o resto — espaços, acentos, o til, os emojis, e também os símbolos com significado estrutural como ? ou & — precisa ser codificado para não quebrar o endereço nem mudar o seu sentido.

Os dois dígitos depois do % são o valor do byte em UTF-8. Por isso um caractere pode ocupar mais de uma sequência: o ç são dois bytes, escritos %C3%A7, e o símbolo do euro são três, %E2%82%AC.

Os três modos e quando usar cada um

«Qual eu escolho?» é a dúvida de verdade, e depende do que você está codificando: um pedaço solto ou um endereço inteiro.

Modo Para quê O que faz com / ? &
ComponenteO valor de um parâmetroCodifica
URL completaUm endereço já montado, sem acentos no domínioRespeita
URL inteligenteUm endereço inteiro, domínio incluídoRespeita e trata o domínio à parte

Um exemplo do primeiro: para passar café & chá como valor de um parâmetro, é preciso usar o modo componente. Se o & ficasse sem codificar, o servidor entenderia que começa outro parâmetro e o seu valor seria cortado em «café».

Por que o domínio não é codificado com %

É aqui que quase todas as ferramentas erram, e o resultado não é estético: elas devolvem um endereço que não funciona.

O sistema de nomes de domínio não entende a codificação percentual. Domínios com caracteres fora do ASCII são codificados com Punycode, um algoritmo completamente diferente que gera nomes com o prefixo xn--. O caminho e a consulta, por outro lado, usam sim a codificação percentual. São dois mecanismos para duas partes do mesmo endereço.

Entrada
https://ação.com.br/coração novo
Codificando o endereço inteiro em percentual
https://a%C3%A7%C3%A3o.com.br/cora%C3%A7%C3%A3o%20novo
Tratando cada parte como deve
https://xn--ao-siap.com.br/cora%C3%A7%C3%A3o%20novo

O primeiro endereço não resolve: nenhum servidor de nomes sabe o que é a%C3%A7%C3%A3o.com.br. O segundo sim, e é o que o seu navegador gera por dentro quando você digita ação.com.br na barra: ele mostra a versão bonita e consulta a versão xn--.

Domínios .com.br com acento existem desde 2005, quando o Registro.br passou a aceitá-los, então isso não é um caso teórico no Brasil. O modo URL inteligente faz essa divisão e mostra o detalhamento parte por parte. Também funciona ao contrário: se você colar um endereço com xn--, ele devolve legível.

Cedilha e til numa URL

Estes são os valores reais dos caracteres que mais aparecem ao escrever em português. A coluna de bytes explica por que uns ocupam mais que outros:

Caractere Codificado Bytes
espaço %20 1
ç %C3%A7 2
ã %C3%A3 2
õ %C3%B5 2
á %C3%A1 2
ê %C3%AA 2
ñ %C3%B1 2
%E2%82%AC 3
& %26 1
/ %2F 1
? %3F 1
# %23 1
+ %2B 1
@ %40 1

Calculado com o mesmo motor que a ferramenta usa.

Uma URL funcionar com acentos não quer dizer que convenha usá-los. Ao copiar, ela aparece cheia de %C3%A7, fica mais comprida e alguns sistemas antigos a quebram mal. Para endereços novos, o normal é converter o título num slug sem acentos: é para isso que serve o gerador de slug.

Quais caracteres são codificados e quais não

A norma que rege a codificação de URL é a RFC 3986, e ela divide os caracteres em três grupos. Entender a divisão evita a maior parte dos sustos.

Não reservados: nunca são codificados. As letras de A a Z nas duas caixas, os algarismos de 0 a 9 e quatro sinais: -, _, . e ~. Qualquer ferramenta que codifique esses está fazendo trabalho a mais, e o resultado, embora válido, fica mais comprido e menos legível.

Reservados: codificados conforme o lugar. Aqui entram : / ? # [ ] @ e também ! & ' ( ) * + , ; =. Eles têm significado estrutural, então precisam ser codificados quando fazem parte de um valor e deixados em paz quando funcionam como separadores. É exatamente a diferença entre o modo componente e o modo URL completa.

O resto: sempre codificado. Espaços, acentos, cedilha, til, emojis e qualquer caractere fora do ASCII.

Há um detalhe que quase nenhuma ferramenta menciona e que vale conhecer ao codificar uma URL a partir do JavaScript: a função encodeURIComponent deixa cinco caracteres intactos que a RFC 3986 considera reservados — !, *, ', ( e ). Verificamos executando, não de memória. Na prática raramente dá problema, mas alguns servidores e assinaturas de API os tratam de outro jeito, e aí aparece um erro difícil de achar justamente porque o endereço parece correto.

%20 ou +: qual é o certo

Os dois representam um espaço, mas não no mesmo lugar, e confundi-los gera erros difíceis de enxergar.

%20 vale sempre. É a codificação do espaço em qualquer parte de uma URL: o caminho, a consulta ou o fragmento.

+ só vale dentro dos dados de um formulário enviados com o tipo application/x-www-form-urlencoded, que é o que um formulário HTML clássico faz. Fora dali, um + é um sinal de mais literal, não um espaço.

A consequência prática: se alguém busca C++ e o seu sistema interpreta os + como espaços, você recebe C seguido de dois espaços. Por isso o sinal de mais literal é codificado como %2B quando a distinção importa.

A caixa da ferramenta permite gerar qualquer uma das duas formas. Se você não sabe qual precisa, deixe %20.

Erros frequentes

Codificar duas vezes

Se você codifica algo que já estava codificado, o % vira %25 e %C3%A7 acaba como %25C3%25A7. O servidor decodifica uma vez e recebe o texto literal em vez do caractere. Ver %25 num endereço é quase sempre esse sinal.

Usar o modo componente numa URL inteira

Ele codifica também o :// e as barras, e o endereço deixa de ser um endereço: vira um texto que só serve como valor de um parâmetro. É correto se for exatamente isso que você quer — uma URL de retorno dentro de outra —, mas não para publicar o link.

Codificar o domínio em percentual

O erro da seção anterior, e o mais silencioso: o endereço parece razoável e não resolve. O domínio é codificado com Punycode.

Esquecer a cerquilha

O símbolo # marca o começo do fragmento, então tudo o que vem depois não chega ao servidor. Se ele faz parte de um valor, precisa ir como %23.

Perguntas frequentes

É grátis? Precisa de cadastro?
É grátis, sem cadastro e sem limite de uso. Tudo é calculado no seu navegador: a URL não vai para nenhum servidor, então você pode colar endereços internos ou com parâmetros privados sem que saiam do seu computador.
Qual é a diferença entre os três modos?
Componente codifica absolutamente tudo, inclusive / ? & =, e serve para o valor de um parâmetro. URL completa respeita esses separadores porque eles formam a estrutura do endereço. URL inteligente analisa a URL e trata cada parte como deve: o domínio com Punycode e o caminho e a consulta com codificação percentual. Se você colou um endereço inteiro, o modo inteligente é o certo.
Por que o domínio não é codificado com %?
Porque o sistema de nomes de domínio não entende a codificação percentual. Domínios com cedilha ou til são convertidos com Punycode, um algoritmo diferente que gera o prefixo xn--: ação.com.br vira xn--ao-siap.com.br. Uma ferramenta que aplica codificação percentual ao endereço inteiro devolve algo que não resolve.
Como o ç é codificado numa URL?
O ç vira %C3%A7, que são os seus dois bytes em UTF-8 escritos em hexadecimal. As vogais com til ocupam também dois bytes (ã é %C3%A3) e o símbolo do euro, três (%E2%82%AC). Por isso uma URL cheia de caracteres do português cresce bastante ao ser codificada.
Uso %20 ou + para os espaços?
%20 é a codificação do espaço em qualquer parte de uma URL. O sinal de mais só significa espaço dentro dos dados de um formulário enviados como application/x-www-form-urlencoded, não no resto do endereço. Na dúvida, use %20: funciona sempre. A caixa da ferramenta deixa você escolher.
O que é dupla codificação e por que ela quebra tudo?
Acontece quando você codifica algo que já estava codificado: o % de %C3%A7 é codificado de novo e você acaba com %25C3%25A7. O servidor decodifica uma vez só e recebe o texto literal em vez do caractere. Ver %25 num endereço é quase sempre esse erro.