Codificador / Decodificador de URL

Codifique texto para URLs ou decodifique uma URL codificada.

100% privado — funciona inteiramente no seu navegador. Seus dados são processados no seu dispositivo e nunca enviados para a internet.

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

Adicionamos novas ferramentas com frequência — inscreva-se no YouTube para ser avisado a cada lançamento.

Mais ferramentas

Ver tudo

Aplicativos recomendados

Ver tudo