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 / ? & |
|---|---|---|
| Componente | O valor de um parâmetro | Codifica |
| URL completa | Um endereço já montado, sem acentos no domínio | Respeita |
| URL inteligente | Um endereço inteiro, domínio incluído | Respeita 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.
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?
Qual é a diferença entre os três modos?
Por que o domínio não é codificado com %?
Como o ç é codificado numa URL?
Uso %20 ou + para os espaços?
O que é dupla codificação e por que ela quebra tudo?
Ferramentas relacionadas
Gerador de Slug
Transforme um título numa URL limpa, sem acentos.
Letra Ñ
O ñ em domínios, Punycode e dupla codificação.
Codificar Base64
Codifique e decodifique em Base64 com UTF-8 correto.
Texto em Binário
Converta texto em binário e de volta, byte a byte.
Simulador de SERP
Veja se o Google vai cortar o seu título e a sua URL.
Limpar Texto
Remova caracteres invisíveis e formatação de uma vez.