Como codificar uma URL: %20 ou + e erros comuns

Por • 1 Novembro, 2026 • Ferramentas para desenvolvedores • 10 minutos de leitura

Codifique qualquer texto para URL em segundos com uma ferramenta grátis. Quando usar %20 ou +, acentos e ç, e como evitar a codificação dupla.

Para codificar uma URL (URL encode), troque cada caractere que não seja letra sem acento, número ou um de - . _ ~ por um % seguido do valor hexadecimal de cada um dos seus bytes em UTF-8. Espaço vira %20 (ou + dentro da query), & vira %26 e ação vira a%C3%A7%C3%A3o. O jeito mais rápido é colar o texto no nosso codificador de URL grátis e copiar o resultado: é grátis, não pede cadastro e funciona em qualquer navegador. A parte difícil é saber o que codificar e qual variante o lugar onde você vai colar espera, e é disso que este guia trata.

Todos os resultados abaixo são reais: rodamos as entradas nas ferramentas do My Botsy em produção em 1º de novembro de 2026 e comparamos com JavaScript (Node.js 24), Python 3.13 e PHP usando as mesmas strings.

Como codificar uma URL, passo a passo

  1. Separe o valor. Codifique só o dado que vai dentro da URL: um termo de busca, um nome de arquivo ou um endereço de redirecionamento. Nunca o endereço inteiro (explicamos abaixo).
  2. Cole no codificador. Abra o codificador de URL, cole o valor e clique em Enviar.
  3. Copie o resultado. Use o botão de copiar. Os espaços saem como +, o que está certo para uma query string.
  4. Troque por %20 se for no caminho. Se o valor faz parte do caminho (antes do ?), substitua cada + por %20. É seguro, porque um sinal de mais de verdade no seu texto já sai como %2B.
  5. Confira. Cole o link final no analisador de URL: ele decodifica cada parâmetro e mostra exatamente o que o servidor vai receber.

Teste agora: cole qualquer texto com espaços, acentos ou um & no codificador de URL grátis e tenha uma versão segura para links em um segundo.

Quais caracteres precisam ser codificados

A RFC 3986, o padrão que define URLs, divide os caracteres em três grupos:

  • Não reservados, nunca precisam de codificação: A–Z a–z 0–9 - . _ ~. Repare que ç, ã e as vogais acentuadas não estão na lista.
  • Reservados, têm função na URL: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Precisam ser codificados quando fazem parte dos seus dados e não da estrutura. Um & sem codificar numa busca abre um parâmetro novo e corta o seu valor ao meio.
  • Todo o resto: espaços, aspas, < >, %, letras acentuadas, emojis e qualquer alfabeto não latino. Sempre são codificados, byte a byte, a partir do UTF-8. Por isso promoção de verão fica promo%C3%A7%C3%A3o+de+ver%C3%A3o.

Teste real: uma string cheia de armadilhas

Usamos de propósito uma entrada difícil, com quase todos os problemas possíveis:

Café & Bar #1 / 50% off? a+b=c ~ü 東京 Tom's "best" <b>

O codificador de URL devolveu:

Caf%C3%A9+%26+Bar+%231+%2F+50%25+off%3F+a%2Bb%3Dc+%7E%C3%BC+%E6%9D%B1%E4%BA%AC+Tom%27s+%22best%22+%3Cb%3E
EntradaSaídaPor que importa
espaço+Formato de formulário, válido na query
&%26Senão começaria um parâmetro novo
#%23Senão tudo depois vira fragmento, que o servidor nunca vê
%%25Senão 50% o seria lido como um escape quebrado
+%2BSenão o servidor lê como espaço
é, ü%C3%A9, %C3%BCDois bytes UTF-8 cada
~%7EDesnecessário mas inofensivo: servidores aceitam as duas formas
' " < >%27 %22 %3C %3EMantidos como dados, não apagados

Essa saída é idêntica, byte a byte, à que o URLSearchParams do navegador gera para o mesmo texto, e à da função urlencode() do PHP, que é a usada pela ferramenta. Um valor codificado aqui se comporta igual a um enviado por formulário web.

%20 ou +: qual usar para espaços

Os dois significam "espaço", mas em lugares diferentes. %20 é a codificação percentual geral da RFC 3986 e funciona em qualquer parte da URL. + vem do formato de formulários HTML (application/x-www-form-urlencoded) e só vale como espaço dentro da query string. No caminho, + é um sinal de mais literal: /arquivos/meu+relatorio.pdf pede um arquivo com um mais no nome.

  • Valores da query (?q=promo%C3%A7%C3%A3o+de+ver%C3%A3o): + ou %20, os dois funcionam.
  • Segmentos do caminho (/docs/meu%20relatorio): só %20.
  • Links mailto:: %20. O padrão do mailto (RFC 6068) pede espaços como %20, porque um + não se distingue de um mais real, como em ana+newsletter@example.org. Por isso nosso gerador de links mailto usa %20; veja o guia de links mailto.

Qual função usar no código

Passamos a mesma string de teste pelas funções mais comuns. Elas discordam em quatro pontos: espaço, /, ~ e '.

FunçãoEspaço/~'Deixa & # ? sem codificar?
JS encodeURIComponent%20%2F~'Não
JS encodeURI%20/~'Sim
JS URLSearchParams+%2F%7E%27Não
Python quote()%20/~%27Não
Python quote_plus()+%2F~%27Não
PHP rawurlencode()%20%2F~%27Não
PHP urlencode() / nossa ferramenta+%2F%7E%27Não

Duas delas costumam pegar desenvolvedores de surpresa. encodeURI foi feita para uma URL inteira, então não mexe em &, #, ?, = nem +; aplicada a um valor, Café & Bar #1 vira Caf%C3%A9%20&%20Bar%20#1 e o link quebra no & e no #. O quote() do Python mantém a / por padrão, então um redirecionamento como /carrinho?id=7 fica com a barra se você não passar safe=''. Para um valor isolado, use encodeURIComponent, quote(valor, safe='') ou rawurlencode.

Exemplo prático: uma URL dentro de outra URL

Uma página de login precisa devolver o usuário para /cart?id=7. Se você escrever /login?next=/cart?id=7, o segundo ? e qualquer & seguinte confundem o servidor. Codifique a URL interna primeiro:

/login?next=%2Fcart%3Fid%3D7

Para conferir um link pronto, colamos https://shop.example/search?q=caf%C3%A9+%26+bar&next=%2Fcart%3Fid%3D7 no analisador de URL. Ele mostrou a query bruta e depois os parâmetros decodificados, exatamente como o servidor recebe:

{ "q": "café & bar", "next": "/cart?id=7" }

Dois valores limpos, nenhum parâmetro sobrando. Links de campanha funcionam do mesmo jeito: cada valor UTM é um parâmetro, então codifique-o ou, melhor, use só minúsculas e sublinhados, como recomenda nosso guia de parâmetros UTM.

Erros comuns ao codificar URLs

Codificar a URL inteira

Codificar https://mybotsy.com/?q=tenis vermelho dá https%3A%2F%2Fmybotsy.com%2F%3Fq%3Dtenis+vermelho, que não funciona mais como link. Só está certo quando a URL inteira é o valor de um parâmetro, como no redirecionamento acima.

Codificar duas vezes

Codificar de novo um texto já codificado codifica os sinais de porcentagem. Testamos a%20b e saiu a%2520b. Se você vê %25 seguido de dois dígitos hexadecimais num link, ele foi codificado duas vezes. Decodificar %25252F exige três passadas até chegar a / (%252F, depois %2F, depois /).

Perder um sinal de mais ao decodificar

Decodificadores no estilo formulário, incluindo nosso decodificador de URL, transformam + em espaço. Decodificamos q=mac+cheese&phone=%2B54+11+5555&path=%2Fdocs%2520v2 e saiu q=mac cheese&phone=+54 11 5555&path=/docs%20v2. O código do país só sobreviveu porque o mais estava escrito como %2B; um +55 sem codificar teria virado espaço. O mesmo estraga valores Base64 em URLs: veja como decodificar Base64 para conhecer o alfabeto seguro para URLs que evita isso.

Misturar escapes Latin-1 antigos com UTF-8

Alguns sistemas antigos codificam é como %E9 (um byte Latin-1) em vez de %C3%A9. Decodificado como UTF-8, caf%E9 aparece como caf�. Se o caractere de substituição aparecer, a origem usava uma codificação antiga; é comum com ç e ã vindos de sistemas legados.

Confiar no corte automático

Nosso codificador remove espaços do começo e do fim: " hello world" + quebra de linha + "line 2 " saiu como hello+world%0D%0Aline+2. Normalmente é o que você quer, mas se um espaço inicial importa, coloque %20 à mão. Uma quebra de linha digitada no navegador vira %0D%0A.

Um % solto no JavaScript

decodeURIComponent("50%") lança URIError: URI malformed. Nosso decodificador deixa o % solto como está (50% off continua 50% off): prático com dados bagunçados, mas também não avisa.

Ferramentas grátis relacionadas

Todas são grátis e não pedem cadastro. Visitantes têm 5 usos por dia, e uma conta grátis do My Botsy (100% grátis, sem spam) remove esse limite.

Perguntas frequentes

O que é codificar uma URL?

Codificar uma URL, ou codificação percentual, troca caracteres não permitidos ou com significado especial por um sinal % e o valor hexadecimal de cada byte. Espaço vira %20, & vira %26 e ç vira %C3%A7, seus dois bytes UTF-8.

Espaço na URL é %20 ou +?

Dentro da query string os dois funcionam, porque + é a forma de formulário de escrever espaço. No caminho ou num link mailto use %20, porque ali + é um sinal de mais literal. Nosso codificador devolve +, então troque por %20 se for no caminho.

Quais caracteres não precisam ser codificados?

Só as letras de A a Z sem acento, os dígitos de 0 a 9 e os símbolos - . _ ~. Reservados como & ? # = / + : são codificados quando fazem parte do dado, e todo o resto (espaços, aspas, acentos, ç, emojis) é sempre codificado.

Qual a diferença entre encodeURI e encodeURIComponent?

encodeURI é para uma URL inteira e não mexe em caracteres estruturais como & # ? = e /. encodeURIComponent é para um valor isolado e codifica todos eles. Usar encodeURI num termo de busca ou redirecionamento quebra o link no primeiro & ou #.

Ele foi codificado duas vezes: a primeira passada transformou o espaço em %20 e a segunda transformou o % em %25. Decodifique uma vez e codifique o texto original uma única vez.

O codificador de URL é grátis?

Sim. O codificador de URL do My Botsy é grátis, não pede cadastro e funciona em qualquer navegador. Visitantes têm 5 usos por dia, e uma conta grátis remove o limite.

Tem um valor para colocar num link? Cole no codificador de URL grátis, copie o resultado e confira o link final no analisador de URL.

Como ler um user agent (com exemplos reais)

2 Novembro, 2026

Aprenda a ler qualquer user agent: quais tokens importam, quais valores os navegadores congelam e como verificar bots. Resultados reais do a..

Como minificar CSS (e quanto você economiza de verdade)

31 Outubro, 2026

Minifique CSS em segundos com uma ferramenta grátis, veja a economia real depois do gzip e do Brotli e evite os erros que quebram o estilo s..

Como decodificar Base64: texto, imagens e JWT (grátis)

30 Outubro, 2026

Decodifique qualquer string Base64 em segundos: exemplos reais com texto, imagens, JWT e Basic Auth, por que saem caracteres estranhos e com..