Como codificar e decodificar URLs

· 7 min de leitura

Se voce ja viu %20 em uma URL onde deveria estar um espaco, ou %C3%A9 onde pertence um caractere acentuado, voce encontrou a codificacao de URL. E uma parte fundamental de como a web funciona, e entende-la ajuda voce a depurar links quebrados, problemas de API e envios de formularios. Um codificador baseado em navegador lida com todo o trabalho localmente sem enviar seus dados para um servidor.

O que a codificacao de URL faz

URLs so podem conter um conjunto limitado de caracteres com seguranca: letras (A-Z, a-z), digitos (0-9) e alguns caracteres especiais (-, _, ., ~). Todo o resto (espacos, caracteres acentuados, emoji e simbolos como &, =, #, ?) deve ser convertido para um formato seguro.

A codificacao de URL (tambem chamada de codificacao percentual) substitui caracteres inseguros por um % seguido de seus valores de byte hexadecimais:

CaractereCodificado
Espaco%20
&%26
=%3D
#%23
?%3F
/%2F
@%40
:%3A
+%2B
,%2C
;%3B
(quebra de linha)%0A
(tabulacao)%09

Quando voce precisa de codificacao de URL

Como codificar e decodificar

  1. Escolha codificar ou decodificar: selecione a direcao. Escolha encodeURIComponent para parametros de consulta ou encodeURI para URLs completas.
  2. Cole sua entrada: insira o texto ou URL. O resultado atualiza instantaneamente.
  3. Copie a saida: use o resultado em seu codigo, solicitacao de API ou navegador.

Uma breve historia da codificacao de URL

A codificacao de URL foi definida pelo RFC 1738 em dezembro de 1994, junto com a especificacao URL original. O RFC foi escrito por Tim Berners-Lee (inventor da web) com contribuicao do Grupo de Trabalho URI do IETF. O esquema de codificacao original usava valores de byte ASCII: cada caractere reservado ou inseguro era codificado como % seguido de dois digitos hexadecimais.

A codificacao foi atualizada varias vezes:

A maior mudanca foi a mudanca para UTF-8 no RFC 3986. Antes disso, URLs codificadas eram somente ASCII, e caracteres nao latinos exigiam solucoes alternativas (Punycode para dominios, IDN para enderecos internacionais). Hoje, um «é» acentuado em uma URL codifica para %C3%A9 (seus dois bytes UTF-8), nao o byte Latin-1 %E9 que sistemas mais antigos produziriam.

encodeURI vs encodeURIComponent vs encodeURIFull

JavaScript tem tres funcoes de codificacao com comportamento sutilmente diferente:

FuncaoO que codificaO que preservaUsar para
encodeURI()Todos os caracteres insegurosSintaxe URL: : / ? & = #Codificar URLs inteiras
encodeURIComponent()Todos os caracteres inseguros incluindo sintaxe URLApenas A-Z a-z 0-9 - _ . ~ ! * ' ( )Valores de parametros de consulta
escape() (descontinuada)A maioria dos caracteres insegurosApenas Latin-1Nao usar

Em Python:

Em outras linguagens:

LinguagemCodificacao de componenteCodificacao URI completa
JavaURLEncoder.encode() (com ressalvas em torno de +)URI.toASCIIString()
C#Uri.EscapeDataStringUri.EscapeUriString
RubyCGI.escape()URI.encode_www_form_component
PHPrawurlencode()urlencode() (nota: %2B vs +)
Gourl.QueryEscape()url.PathEscape()
Rustcrate percent_encodingcrate percent_encoding

Armadilhas comuns

Exemplos trabalhados

EntradaencodeURIencodeURIComponent
hello worldhello%20worldhello%20world
q=test&page=1q=test&page=1q%3Dtest%26page%3D1
https://x.com/pathhttps://x.com/pathhttps%3A%2F%2Fx.com%2Fpath
caf écaf%20%C3%A9caf%20%C3%A9
中文%E4%B8%AD%E6%96%87%E4%B8%AD%E6%96%87
100%100%25100%25
email@test.comemail@test.comemail%40test.com

Dicas

Privacidade e URLs confidenciais

O codificador e decodificador de URL rodam inteiramente no seu navegador. As URLs que voce cola, o processamento intermediario e a saida codificada/decodificada ficam todos no seu dispositivo. Nada e enviado para um servidor, registrado ou compartilhado com ninguem.

Isso importa porque URLs frequentemente contem dados extremamente sensiveis: chaves e tokens de API em parametros de consulta, codigos de autorizacao OAuth que concedem acesso a conta, IDs de sessao, URLs assinadas para buckets S3 privados com credenciais incorporadas, tokens de login de link magico, URLs de redefinicao de senha, URLs internas de administracao que revelam a estrutura do produto, enderecos de e-mail de clientes em links de cancelamento de inscricao, dados pessoais em envios de formularios. Codificadores URL em nuvem registram cada colagem, as vezes os retem para «melhoria do servico», e estiveram envolvidos em vazamentos reais onde tokens de autenticacao colados foram extraidos por atacantes monitorando os logs. Um codificador baseado em navegador tem exposicao zero: a URL nunca sai da sua maquina.

A codificacao baseada em navegador tambem funciona offline depois que a pagina e carregada, util para codificar URLs em avioes, em ambientes seguros sem acesso a internet, ou em qualquer lugar onde voce nao pode ou nao deveria colar URLs portadoras de autenticacao em um servico de terceiros.

Perguntas frequentes

Qual a diferença entre encodeURI e encodeURIComponent?

encodeURI preserva caracteres válidos na estrutura de URL (barras, dois-pontos, pontos de interrogação). encodeURIComponent codifica tudo exceto letras, dígitos e alguns caracteres seguros. Use encodeURIComponent para valores de parâmetros de consulta, encodeURI para URLs completas.

Por que espaços viram %20 ou +?

Na codificação de URL, espaços viram %20. Em dados de formulário (application/x-www-form-urlencoded), espaços viram +. Ambos são válidos em seus respectivos contextos, mas %20 é o padrão universal para URLs.

Preciso codificar minhas URLs manualmente?

Na maioria dos casos, sua linguagem de programação ou framework lida com codificação automaticamente. Codificação manual é necessária ao construir URLs à mão, depurar requisições de API ou trabalhar com strings de consulta que contêm caracteres especiais.

Meus dados são enviados a um servidor?

Não. Toda a codificação e decodificação acontece no seu navegador.