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:
- Converta o caractere para bytes usando UTF-8.
- Converta cada byte para hexadecimal, com dois dígitos.
- 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.
Erros que quebram links
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
- Codificador e Decodificador de URL
Codifique texto para uso seguro em URLs (percent-encoding) e decodifique de volta.
- Conversor de Base Numérica
Converta números entre binário, octal, decimal e hexadecimal instantaneamente.
- Gerador de UUID
Gere identificadores únicos universais (UUID v4) para usar em bancos de dados e sistemas.