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
- 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).
- Cole no codificador. Abra o codificador de URL, cole o valor e clique em Enviar.
- Copie o resultado. Use o botão de copiar. Os espaços saem como
+, o que está certo para uma query string. - 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. - 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 issopromoção de verãoficapromo%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
| Entrada | Saída | Por que importa |
|---|---|---|
| espaço | + | Formato de formulário, válido na query |
& | %26 | Senão começaria um parâmetro novo |
# | %23 | Senão tudo depois vira fragmento, que o servidor nunca vê |
% | %25 | Senão 50% o seria lido como um escape quebrado |
+ | %2B | Senão o servidor lê como espaço |
é, ü | %C3%A9, %C3%BC | Dois bytes UTF-8 cada |
~ | %7E | Desnecessário mas inofensivo: servidores aceitam as duas formas |
' " < > | %27 %22 %3C %3E | Mantidos 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 emana+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ção | Espaço | / | ~ | ' | Deixa & # ? sem codificar? |
|---|---|---|---|---|---|
JS encodeURIComponent | %20 | %2F | ~ | ' | Não |
JS encodeURI | %20 | / | ~ | ' | Sim |
JS URLSearchParams | + | %2F | %7E | %27 | Não |
Python quote() | %20 | / | ~ | %27 | Não |
Python quote_plus() | + | %2F | ~ | %27 | Não |
PHP rawurlencode() | %20 | %2F | ~ | %27 | Não |
PHP urlencode() / nossa ferramenta | + | %2F | %7E | %27 | Nã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
- Decodificador de URL: transforma
%20,%26e%C3%A7de volta em texto. - Analisador de URL: separa host, caminho e parâmetros decodificados.
- Gerador de links UTM: cria links de campanha com os valores já codificados.
- Gerador de links do WhatsApp: links wa.me com mensagem pronta (veja nosso guia de links do WhatsApp).
- Gerador de slug: se você controla a URL, um slug limpo evita codificação (como criar um slug amigável para SEO).
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 #.
Por que meu link mostra %2520?
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.