Codificar / Decodificar URL

Codifique ou decodifique componentes de URL.

...

Porque os URLs Precisam de Codificação

Um URL só pode conter um conjunto limitado de carateres ASCII. Todo o resto — espaços, tremas, emoji e carateres com significado especial como &, = e ? — tem de ser codificado por percentagem: cada byte da representação UTF-8 do carater torna-se % seguido de dois dígitos hexadecimais. Salte este passo e uma consulta de pesquisa como coffee & cream parte silenciosamente a sua string de consulta: o & inicia um novo parâmetro e metade do seu valor desaparece.

Esta ferramenta usa encodeURIComponent, a variante estrita destinada a partes individuais de um URL. coffee & cream torna-se coffee%20%26%20cream, e descodificar inverte-o exatamente.

Carateres Comuns e as Suas Codificações

CaraterCodificadoPorque importa num URL
espaço%20Os espaços terminam o URL em muitos contextos
&%26Separa parâmetros de consulta
=%3DSepara o nome e o valor do parâmetro
?%3FInicia a string de consulta
#%23Inicia o fragmento — tudo o que vem depois é descartado dos pedidos
/%2FSeparador de segmentos do caminho
+%2BDescodificado como espaço em dados de formulário se ficar em bruto
ü%C3%BCNão-ASCII — dois bytes em UTF-8, duas sequências %

encodeURI vs. encodeURIComponent

O JavaScript traz dois codificadores, e confundi-los é um erro clássico. encodeURI é para um URL completo: deixa :, /, ?, # e & intactos para que a estrutura do URL sobreviva. encodeURIComponent — o que esta ferramenta usa — é para um valor único dentro de um URL e codifica todos esses. Regra prática: a construir um parâmetro de consulta? Sempre encodeURIComponent. A codificar um URL inteiro que alguém escreveu? encodeURI. Se codificar um URL completo com a variante de componente, o https%3A%2F%2F à frente diz-lhe o que correu mal.

Armadilhas a Conhecer

  • Dupla codificação: codificar duas vezes transforma %20 em %2520. Se vir sequências %25 por aí, algo codificou texto já codificado.
  • Descodificar entrada inválida: um % perdido não seguido de dois dígitos hexadecimais (como 100% legit) falha a descodificação — a ferramenta reporta-o em vez de adivinhar.
  • + nem sempre é um espaço: apenas em dados de formulário application/x-www-form-urlencoded. decodeURIComponent deixa corretamente + como +.

Tudo corre inteiramente no seu navegador — nenhum URL que cole é alguma vez enviado para um servidor. Ferramentas relacionadas: escape texto para marcação com o codificador de HTML, ou construa caminhos de URL limpos com o gerador de slugs.

Perguntas frequentes

Que carateres são codificados em URL?
Tudo exceto letras, dígitos e - _ . ~ é convertido em sequências %: o espaço torna-se %20, & torna-se %26, e carateres não-ASCII tornam-se uma sequência % por byte UTF-8 (ü → %C3%BC).
Qual é a diferença entre encodeURI e encodeURIComponent?
encodeURI codifica um URL completo e preserva carateres estruturais como :, /, ?, #. encodeURIComponent (usado por esta ferramenta) codifica um único valor e escapa também esses. Use a variante de componente para parâmetros de consulta.
Porque é que %20 às vezes aparece como + em vez disso?
As submissões de formulários HTML (application/x-www-form-urlencoded) historicamente codificam espaços como +. A codificação percentual propriamente dita usa %20. Ambos significam "espaço" em strings de consulta, mas %20 é a escolha segura e universal.
O que é a dupla codificação?
Passar texto já codificado pelo codificador de novo: %20 torna-se %2520 porque o próprio % é codificado. É um erro comum quando várias camadas de um sistema codificam cada uma. Codifique exatamente uma vez, no último momento.
Porque é que a descodificação da minha string falha?
Um % que não é seguido de dois dígitos hexadecimais é codificação percentual malformada — "100% legit" não pode ser descodificado. Corrija-o ou codifique o % em bruto como %25 primeiro.