Conversor URL: percent-encoding e Punycode em um campo
O conversor URL resolve dois problemas que aparecem juntos no dia-a-dia de quem mexe com web: traduzir caracteres especiais para a forma percent-encoded segura para trafego HTTP, e converter dominios internacionalizados (IDN, com acento, cedilha, caractere nao-ASCII) para a forma ASCII Punycode que o DNS entende. O resultado certo depende de qual parte da URL voce esta codificando, e a ferramenta deixa essa escolha explicita.
O que e percent-encoding (RFC 3986)
Percent-encoding e o mecanismo definido pela RFC 3986 para representar dentro de uma URL qualquer caractere que nao pertenca ao subconjunto seguro. Cada byte do caractere e escrito como % seguido de dois digitos hexadecimais. Caracteres nao-ASCII sao primeiro convertidos para UTF-8 e depois cada byte resultante e codificado. Exemplo: e com acento agudo e dois bytes em UTF-8 (0xC3 0xA9) e vira %C3%A9.
Caracteres reservados e nao-reservados
A RFC 3986 separa os caracteres em dois grupos:
- Nao-reservados: letras A-Z e a-z, digitos 0-9 e os simbolos
-_.~. Nunca precisam ser codificados. - Reservados:
: / ? # [ ] @ ! $ & ' ( ) * + , ; =. Tem funcao estrutural na URL (separador de esquema, host, path, query, fragmento). Sao codificados apenas quando aparecem como dado, nao como delimitador.
encodeURI vs encodeURIComponent
JavaScript expoe duas funcoes que confundem ate dev experiente:
encodeURI()preserva os caracteres reservados estruturais (: / ? # = &) porque assume que a entrada e uma URL completa. Use quando voce tem uma URL inteira ja montada e quer escapar so caracteres invalidos.encodeURIComponent()codifica todos os caracteres reservados. Use para um valor individual de query string ou um segmento de path, antes de concatenar na URL final.
Regra pratica: para montar URL programaticamente, use encodeURIComponent em cada parametro e depois concatene; nunca codifique a URL pronta com encodeURI.
Query strings e application/x-www-form-urlencoded
A query string (parte apos ?) carrega pares chave=valor separados por &. Em formularios HTML enviados como application/x-www-form-urlencoded, espaco vira + em vez de %20, e a quebra de linha vira %0D%0A. Ao decodificar query string de log de servidor, considere esse + antes de aplicar decodeURIComponent, senao o espaco fica preso.
Punycode e dominios IDN (RFC 3492)
O DNS classico aceita apenas ASCII no nome de host. Para suportar dominios com acento ou outro caractere Unicode (cafe.fr, brasil.br com cedilha, dominios em arabe, chines, etc.), a IDNA define a conversao para Punycode (RFC 3492). O dominio xn-- que voce v em log de DNS, certificado TLS ou WHOIS e a forma ASCII de um IDN. Exemplo: munchen.de com umlaut na vogal vira xn--mnchen-3ya.de. O conversor detecta dominios e devolve as duas formas.
Exemplos com acento, emoji e espaco
Para a string cafe com acucar (com cedilhas e acentos), encodeURIComponent produz caf%C3%A9%20com%20a%C3%A7%C3%BAcar. Para hello world, gera hello%20world. Para um emoji como rosto sorrindo (4 bytes UTF-8 na faixa suplementar), aparecem quatro grupos %XX consecutivos. Para o caractere & usado como dado dentro de um valor de query, encodeURIComponent escapa para %26, evitando que o servidor interprete como separador de novo par.
Casos de uso: debug de API, log analysis e seguranca
Tres cenarios concretos onde o conversor URL aparece. Primeiro, debug de API: voce monta uma chamada GET com filtro contendo aspas, espaco e +, e o backend retorna 400. Codificar o valor isoladamente e comparar com o que o cliente HTTP enviou expoe o erro. Segundo, analise de log: linha do Apache mostra GET /buscar?q=caf%C3%A9 e voce precisa ler o termo original. Decodificar devolve cafe com acento. Terceiro, seguranca: investigar tentativa de XSS ou SQLi em log frequentemente exige decodificacao dupla, porque atacante usa double encoding (%2520 em vez de %20) para escapar de filtros mal feitos. Decodificar duas vezes na ferramenta revela o payload real.
Ferramentas relacionadas
Como usar: Conversor URL
- Cole o texto, URL ou query string no campo de entrada.
- Escolha o modo de codificacao: encodeURIComponent (valores) ou encodeURI (URL inteira).
- Clique em "Codificar" para gerar a forma percent-encoded.
- Para o caminho inverso, cole a string codificada e clique em "Decodificar".
- Para dominio com acento ou prefixo xn--, clique em "Punycode IDN" para ver as duas formas.
- Use o botao "Copiar" no resultado desejado e cole na requisicao, log ou configuracao.
Conversor URL: Perguntas Frequentes
E o mecanismo definido pela RFC 3986 para representar caracteres especiais numa URL como % seguido de dois digitos hex. Exemplo: espaco vira %20, e com acento agudo vira %C3%A9 (UTF-8).
encodeURI preserva os caracteres estruturais (: / ? # = &) porque assume URL completa. encodeURIComponent codifica tudo, ideal para valores individuais de query string ou segmento de path.
Nao. Codificar https:// quebra a estrutura (vira https%3A%2F%2F). Codifique apenas os valores ou segmentos especificos antes de concatenar na URL final.
Punycode (RFC 3492) e a forma ASCII de dominios IDN com caracteres nao-ASCII. Use para registrar, consultar DNS ou inspecionar certificado TLS de dominio com acento, cedilha ou caractere de outro alfabeto.
Formularios HTML enviados como application/x-www-form-urlencoded substituem espaco por +. A ferramenta trata + como espaco ao decodificar para refletir o comportamento de servidor.
Nao. Toda a codificacao, decodificacao e conversao Punycode acontece no seu navegador via JavaScript. Nada e enviado.
Nao. Letras A-Z e a-z, digitos 0-9 e os simbolos - _ . ~ sao seguros e nunca precisam de percent-encoding.
Codificar uma string que ja estava codificada. Exemplo: %20 vira %2520. Pode ser intencional em alguns gateways ou indicador de tentativa de bypass de filtros de seguranca em logs de WAF.
O conversor URL aceita qualquer string e devolve as formas codificadas via percent-encoding (encodeURI ou encodeURIComponent), a decodificacao reversa e a traducao Punycode para dominios IDN, prontas para copiar e colar na requisicao HTTP, no log do servidor ou na configuracao de DNS.