Pular para o conteúdo
FoiFácil

Codificação de URL: por que o espaço vira %20

Atualizado em 2026-08-25

O problema que a codificação resolve

Endereços na web foram projetados nos anos 1990 com um alfabeto bem restrito. Uma URL pode conter letras de A a Z, dígitos de 0 a 9 e um punhado de sinais de pontuação. Só isso.

Acontece que o mundo real é cheio de espaços, acentos, cedilhas, emojis e caracteres de outros alfabetos. E vários sinais de pontuação têm significado estrutural dentro do endereço: a barra separa caminhos, a interrogação inicia a consulta, o e comercial separa parâmetros. Se esses caracteres aparecessem dentro de um valor, a URL seria interpretada errado.

A codificação percentual, ou percent-encoding, resolve os dois problemas com uma regra só: qualquer caractere problemático é substituído por um sinal de porcentagem seguido do seu valor em hexadecimal.

O espaço, cujo código é 32 em decimal e 20 em hexadecimal, vira %20.

Como a conversão funciona

O processo tem três passos:

  1. Converta o caractere para bytes usando UTF-8.
  2. Converta cada byte para hexadecimal, com dois dígitos.
  3. Coloque um sinal de porcentagem antes de cada par.

Para caracteres do alfabeto latino básico, cada um vira um byte só:

Caractere Byte Codificado
espaço 32 %20
! 33 %21
# 35 %23
$ 36 %24
& 38 %26
+ 43 %2B
/ 47 %2F
: 58 %3A
= 61 %3D
? 63 %3F
@ 64 %40

Caracteres acentuados ocupam dois bytes em UTF-8, e por isso viram dois pares:

Caractere Codificado
á %C3%A1
ã %C3%A3
ç %C3%A7
é %C3%A9
õ %C3%B5
ú %C3%BA

E emojis, que ocupam quatro bytes, viram quatro pares. O emoji de foguete, por exemplo, vira %F0%9F%9A%80.

Se a lógica da conversão hexadecimal não estiver clara, o conversor de base numérica mostra a relação entre decimal e hexadecimal na prática.

Um exemplo completo

Suponha uma busca por "café com leite & açúcar" num site.

A URL crua seria:

https://exemplo.com/busca?q=café com leite & açúcar

Isso não funciona. Os espaços quebram a URL, o e comercial seria lido como separador de parâmetros e os acentos não são permitidos. Codificado corretamente:

https://exemplo.com/busca?q=caf%C3%A9%20com%20leite%20%26%20a%C3%A7%C3%BAcar

Feio, mas correto e inequívoco. O navegador decodifica e o servidor recebe o texto original.

O codificador e decodificador de URL faz essa conversão nos dois sentidos, o que é especialmente útil quando você precisa entender o que um endereço longo está de fato carregando.

%20 ou sinal de mais?

Aqui está a confusão mais comum do assunto. Você já viu espaços representados de duas formas — %20 e +. As duas existem, mas em contextos diferentes.

  • %20 é a codificação padrão, válida em qualquer parte da URL.
  • + representa espaço apenas na string de consulta, ou seja, depois do ponto de interrogação, no formato usado por formulários HTML.

Isso significa que:

  • No caminho, /meu+arquivo é um arquivo cujo nome contém literalmente um sinal de mais.
  • Na consulta, ?nome=joão+silva é interpretado como "joão silva" com espaço.

E há uma armadilha derivada: se você quer um sinal de mais literal na consulta — num número de telefone internacional, por exemplo — ele precisa virar %2B. Escrever ?tel=+5511999999999 faz o servidor entender um espaço no lugar do mais, e o telefone chega errado.

Na dúvida, use %20 sempre. Funciona em toda parte.

Quais caracteres precisam ser codificados

Os caracteres se dividem em três grupos.

Não reservados — nunca precisam ser codificados

Letras de A a Z (maiúsculas e minúsculas), dígitos de 0 a 9, e os quatro sinais: hífen, ponto, sublinhado e til.

Reservados — têm função estrutural

Estes: dois-pontos, barra, interrogação, cerquilha, colchetes, arroba, exclamação, cifrão, e comercial, apóstrofo, parênteses, asterisco, mais, vírgula, ponto e vírgula, igual.

Eles podem aparecer sem codificação quando exercem sua função estrutural, mas precisam ser codificados quando fazem parte de um valor. A barra em https://site.com/pasta/arquivo é estrutural; a barra dentro de uma data como 25/08/2026 passada como parâmetro precisa virar %2F.

Todo o resto — sempre codificados

Espaços, acentos, caracteres de outros alfabetos, emojis, aspas, chaves, barra invertida, acento circunflexo, crase e caracteres de controle.

Codificar duas vezes

É o erro mais frequente e o mais difícil de diagnosticar. Se você codifica uma string que já estava codificada, o sinal de porcentagem em si é codificado como %25:

  • Original: café
  • Codificado: caf%C3%A9
  • Codificado de novo: caf%25C3%25A9

O resultado é que o usuário vê literalmente "caf%C3%A9" na tela em vez do texto correto. Sempre que aparecer %25 no meio de um endereço, desconfie de codificação dupla.

Codificar a URL inteira

Codificar o endereço completo, incluindo o https:// e as barras estruturais, produz algo que não é mais um endereço navegável. A codificação se aplica aos valores dentro da URL, não à estrutura dela.

Existe uma exceção legítima: quando uma URL é passada como parâmetro de outra URL, como em redirecionamentos. Nesse caso ela é um valor, e aí sim vai codificada inteira.

Esquecer o e comercial dentro de um valor

Um valor contendo "&" sem codificação corta o parâmetro ali. O servidor recebe um valor truncado e um parâmetro extra que não existe.

Assumir codificação diferente de UTF-8

Sistemas antigos às vezes usam Latin-1, onde "á" seria %E1 em vez de %C3%A1. Isso gera aqueles caracteres estranhos do tipo "é" no lugar do acento. UTF-8 é o padrão atual e deve ser assumido salvo indicação contrária explícita.

Quando você vai precisar disso

  • Montar links de compartilhamento com texto pré-preenchido.
  • Passar termos de busca, datas ou caminhos de arquivo como parâmetro.
  • Depurar por que um link chega quebrado ao destinatário.
  • Ler o que um endereço de rastreamento está de fato enviando.
  • Construir links de mensagem com texto pronto.
  • Trabalhar com integrações que recebem parâmetros por URL.

Codificação de URL não é segurança

Um esclarecimento necessário: percent-encoding não é criptografia nem ofuscação. É apenas uma representação alternativa, trivialmente reversível por qualquer pessoa.

Nunca coloque senhas, tokens, documentos ou dados pessoais na URL achando que a codificação protege alguma coisa. URLs aparecem em logs de servidor, no histórico do navegador, em cabeçalhos de referência enviados a terceiros e em qualquer ferramenta de análise instalada na página. Dados sensíveis pertencem ao corpo de uma requisição, não ao endereço.

Perguntas frequentes

Maiúsculas ou minúsculas nos dígitos hexadecimais? Ambas são válidas — %C3 e %c3 significam o mesmo. A convenção recomendada é maiúsculas.

Por que alguns sites mostram acentos na URL normalmente? Porque navegadores modernos exibem a forma decodificada por conveniência, enquanto enviam a forma codificada. Copie o endereço e cole num editor de texto para ver o que realmente está sendo transmitido.

Preciso codificar o nome do domínio? Domínios com acentos usam um sistema diferente, chamado Punycode, que converte para uma forma que começa com xn--. É outro mecanismo, não percent-encoding.

Existe limite de tamanho para uma URL? Não há limite no padrão, mas navegadores e servidores impõem os seus. Ficar abaixo de 2.000 caracteres é a recomendação prática segura.

O que significa %25 numa URL? É o próprio sinal de porcentagem codificado. Se ele aparece onde você não esperava, quase sempre indica codificação dupla.

Ferramentas relacionadas