Sobre esta ferramenta
Este codificador / descodificador de URL gratuito codifica texto em percentagem para que possa ser usado com segurança numa URL ou numa query string, e converte uma URL codificada de volta em texto legível.
Trata UTF-8 corretamente, pelo que letras acentuadas, emoji e alfabetos não latinos são codificados e descodificados sem corrupção. Tudo corre no seu navegador — nada é enviado.
O que é a codificação percentual
Uma URL só pode conter um pequeno conjunto de caracteres. Tudo o resto — espaços, aspas, &, #, ?, letras acentuadas, qualquer coisa em chinês ou árabe — tem de ser reescrito antes de poder viajar.
A codificação percentual faz isso substituindo um caractere por um % seguido do seu valor de byte em hexadecimal. Um espaço passa a %20. Um E comercial passa a %26. Um ponto de interrogação passa a %3F. É a mesma ideia do Base64 — tornar dados incómodos aceitáveis para um canal exigente — mas caractere a caractere, o que deixa o resultado em grande parte legível.
Como o que é codificado são bytes, um caractere que ocupe mais de um byte em UTF-8 produz mais do que uma sequência. O é ocupa dois bytes e torna-se %C3%A9. Um caractere chinês ocupa normalmente três e dá três sequências. Um emoji ocupa quatro. É por isso que as URL codificadas com texto não inglês parecem tão longas.
Porque é que isto importa: o problema do `&`
Este é o erro que esta ferramenta existe para evitar, e quase toda a gente o comete uma vez.
Uma query string separa os seus valores com & e =:
/pesquisa?q=cafe&pagina=2
Agora suponha que alguém pesquisa Bed & Breakfast. Inserido em bruto:
/pesquisa?q=Bed & Breakfast&pagina=2
O servidor vê agora três parâmetros — q vale Bed , depois um parâmetro sem sentido Breakfast, depois pagina. A pesquisa devolve silenciosamente a coisa errada. Codifique primeiro o valor e funciona:
/pesquisa?q=Bed%20%26%20Breakfast&pagina=2
Daí a regra: codifique cada valor, não a URL inteira. O & e o = que estruturam a query string têm de permanecer em bruto. O & dentro de um valor não.
Codificar um valor ou uma URL inteira
Esta é a distinção que faz tropeçar, e a razão pela qual existem duas funções diferentes em JavaScript.
encodeURIComponent codifica quase tudo, incluindo /, ?, #, & e =. Use-a para uma única peça de uma URL: um termo de pesquisa, um nome de ficheiro, um destino de redirecionamento, um token. É o que precisa na maior parte das vezes, e é o que esta ferramenta faz.
encodeURI deixa em paz os caracteres estruturais, porque parte do princípio de que lhe entregam uma URL completa e já correta e só é preciso limpar os caracteres ilegais. Use-a numa URL inteira, nunca num valor isolado.
Se codificar uma URL inteira com a versão «component», cada / torna-se %2F e o endereço deixa de funcionar. Se codificar um valor com a versão «URI», o seu & passa incólume e parte a query string. Saber qual queria é todo o truque.
Não é o mesmo que escape HTML
A codificação percentual e o escape HTML parecem-se e resolvem problemas diferentes.
A codificação percentual (%20, %26) torna o texto seguro dentro de uma URL. O escape HTML (&, <) torna-o seguro dentro de um documento HTML. Uma URL impressa numa página pode precisar de ambos, e por essa ordem: primeiro codificar para a URL, depois fazer o escape do resultado para o HTML.
E uma esquisitice conhecida: o + significa por vezes um espaço. É uma herança dos formulários HTML, onde application/x-www-form-urlencoded usa + em vez de %20. A maioria dos servidores aceita ambos numa query string, mas um + num caminho significa um sinal de mais literal. Se um espaço aparecer como + onde não esperava, a causa é um codificador de formulário.
Como usar
- Cole o seu texto ou URL no campo
- Codifique ou Descodifique com os botões
- Troque para devolver o resultado à entrada
- Copie o resultado
Bom saber
- Codifique valores, não URL inteiras. Passar um endereço completo por um codificador transforma cada / em %2F e parte-o.
- Nunca codifique duas vezes. O % é ele próprio codificado como %25, por isso uma segunda passagem transforma %20 em %2520 e o espaço perde-se. É a causa mais comum de um link misteriosamente partido.
- Os caracteres reservados têm significado — entre eles :, /, ?, #, @, &, =, + e $. São legais numa URL, mas têm de ser codificados quando aparecem dentro de um valor.
- Os caracteres não reservados nunca são codificados: A–Z, a–z, 0–9, -, _, . e ~.
- As maiúsculas no hexadecimal não contam. %3f e %3F são idênticos; as maiúsculas são a convenção.
- Um % isolado é inválido. Se a descodificação falhar, procure um % que não seja seguido por dois dígitos hexadecimais — muitas vezes sinal de uma cadeia truncada.
Perguntas frequentes
O que significa %20 numa URL?
É um espaço. O espaço não é permitido numa URL, por isso é codificado em percentagem como %20: um % seguido de 20, o valor hexadecimal do byte de um espaço. Por vezes verá um espaço escrito como +, herança da codificação de formulários; ambos são compreendidos numa query string, mas só %20 é correto num caminho.
Devo codificar a URL toda ou só uma parte?
Só as partes. Codifique cada valor que coloca *dentro* de uma URL — um termo de pesquisa, um nome de ficheiro, um endereço de redirecionamento — e deixe intactos os ://, /, ?, & e = que lhe dão estrutura. Codificar uma URL completa transforma as barras em %2F e impede-a de resolver.
Porque é que o meu link ficou partido depois de codificar?
Quase sempre por dupla codificação. O caractere % é ele próprio codificado como %25, por isso codificar uma cadeia já codificada transforma %20 em %2520. O descodificador devolve-lhe então um %20 literal em vez de um espaço. Descodifique uma vez para ver o que tem realmente antes de voltar a codificar.
Porque é que uma letra acentuada se torna vários códigos %?
Porque a codificação percentual trabalha com bytes, não com letras. Em UTF-8 o é ocupa dois bytes e por isso torna-se %C3%A9. A maioria dos caracteres chineses, japoneses e coreanos ocupa três e dá três sequências; os emoji ocupam quatro. Nada está errado — é simplesmente o que o caractere pesa.
Qual é a diferença entre codificação de URL e escape HTML?
Protegem sítios diferentes. A codificação de URL (%26) torna o texto seguro dentro de um endereço web. O escape HTML (&) torna-o seguro dentro de uma página HTML. Um link impresso numa página pode precisar de ambos, por essa ordem. Usar um onde pertence o outro deixa o problema original por resolver.
O meu texto é enviado para um servidor?
Não. A codificação e a descodificação acontecem ambas no seu navegador, por isso nada do que colar sai do seu dispositivo. A ferramenta continua a funcionar com a ligação desligada.
Ferramentas relacionadas
- Codificar / descodificar Base64 — a outra codificação que aparece constantemente em tokens e data-URL
- Formatador JSON — arrumar e verificar o JSON que viaja muitas vezes nessas query strings
- Descodificador JWT — ler um token que chegou numa URL
- Extrair e-mails e URL — retirar todos os links de um bloco de texto