URL encode e decode
Espaço, acento, cedilha e símbolos quebram URLs — para viajar num link, eles precisam virar códigos percentuais como %20 e %C3%A7. Esta ferramenta codifica e decodifica URLs nos dois sentidos, na hora, direto no seu navegador, sem enviar nada para servidor.
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
Por que o espaço vira %20
URLs só admitem um conjunto restrito de caracteres. Tudo que está fora — espaços, acentos, cedilha, e comercial — precisa ser representado pelo seu código: é o percent-encoding. São Paulo vira S%C3%A3o%20Paulo, feio para humanos e perfeito para máquinas. Quando um link com acento funciona no navegador, é porque ele codificou por baixo dos panos; quando quebra num sistema, é porque alguém esqueceu de codificar.
O link de WhatsApp que chega quebrado
Caso clássico do comércio brasileiro: montar um link wa.me com mensagem pronta — algo como Olá, quero fazer um orçamento — e descobrir que o texto chega cortado no primeiro espaço ou com os acentos embaralhados. A mensagem inteira precisa passar pelo percent-encoding antes de entrar no parâmetro text. Cole a frase aqui, codifique, monte o link e teste: a mensagem chega completa, com acento e emoji no lugar.
Codificar a URL inteira ou só o parâmetro?
A pegadinha que derruba até gente experiente: aplicar a codificação na URL completa transforma os separadores legítimos — dois-pontos, barras, interrogação — em texto, e a URL morre. A regra: codifique cada valor de parâmetro isoladamente, depois monte a URL com os separadores intactos. É a diferença entre o encodeURI e o encodeURIComponent do JavaScript, e a causa número um de query strings quebradas em integrações.
Decodificando URLs de rastreamento intermináveis
Links de campanha chegam entupidos de parâmetros codificados — UTMs, redirecionamentos, tokens de clique. Decodificar revela o que cada pedaço significa: para onde o link realmente aponta, que campanha o gerou, que dados viajam nele. Útil para auditar links de terceiros antes de clicar e para conferir se as suas próprias UTMs foram montadas direito. Em volume, a conversão existe também via API, a US$ 0,002 por chamada.
Casos de uso
Link de WhatsApp com mensagem pronta
A Padaria Pão Dourado quer um botão de pedido no site com a mensagem Olá, quero encomendar um bolo. A frase codificada entra no link wa.me e o cliente chega com o pedido já digitado.
Filtro com acento na query string
O e-commerce filtra por cidade e São Paulo quebra o relatório. Codificando o valor antes de montar a URL, o filtro passa a funcionar para qualquer município — de Niterói a Paraúna.
Auditar um link de campanha
O marketing recebe um link encurtado cheio de parâmetros codificados. Decodificando, a analista confere o destino final e descobre uma UTM com o nome da campanha errado antes de o tráfego começar.
Perguntas frequentes
Espaço deve virar %20 ou sinal de mais?
Depende do lugar: no caminho da URL, %20; em query strings no formato de formulário, o sinal de mais também representa espaço. Na dúvida, %20 funciona nos dois contextos — e é o que esta ferramenta gera.
Por que o ã vira %C3%A3, dois códigos?
Porque em UTF-8 o ã ocupa dois bytes, e cada byte ganha seu código percentual. Caracteres fora do ASCII básico sempre geram sequências de dois ou mais códigos — está correto, não é defeito.
Posso codificar a URL inteira de uma vez?
Não deveria: os separadores (dois-pontos, barras, interrogação) seriam codificados junto e a URL deixaria de funcionar. Codifique só os valores dos parâmetros e monte a estrutura por fora.
O que eu colo aqui fica registrado?
Não — a conversão roda no navegador e o conteúdo não é transmitido. Links com tokens ou dados de clientes permanecem na sua máquina.
Tem API para codificar em volume?
Tem: US$ 0,002 por chamada, preço publicado, sem mensalidade. Útil para higienizar URLs em massa num catálogo ou numa migração.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/url-encode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/dev/url-encode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/url-encode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/url-encode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/url-encode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"items": [
"valor-1",
"valor-2"
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.url_encode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |