Artigo completo
As URLs foram desenhadas para conter apenas um subconjunto restrito de caracteres ASCII: letras, dígitos e alguns símbolos reservados como '/', ':', '?' e '#'. Qualquer outro caractere — espaços, acentos, cedilhas, emojis, sinais de pontuação — tem de ser codificado para percent-encoding conforme definido no RFC 3986. Sem esta codificação, servidores diferentes interpretariam de forma incompatível, quebrariam redirects e produziriam parâmetros truncados.
Este codificador usa encodeURIComponent, a função JavaScript recomendada para codificar valores individuais de query string. Ao contrário de encodeURI (que preserva os separadores estruturais assumindo que recebe uma URL completa), encodeURIComponent codifica também ':', '/', '?', '#', '&' e '=' — evitando que valores contendo estes caracteres sejam confundidos com estrutura de URL.
A codificação percent-encoding funciona byte a byte na representação UTF-8 do texto. O espaço (0x20) torna-se '%20'; a letra 'é' (0xC3 0xA9 em UTF-8) torna-se '%C3%A9'; um emoji 🎉 (4 bytes em UTF-8) torna-se '%F0%9F%8E%89'. Este esquema garante compatibilidade com qualquer servidor no mundo, independentemente da configuração local.
Casos práticos: parâmetros de pesquisa (?q=café latte → ?q=caf%C3%A9%20latte), URLs de callback em OAuth (redirect_uri tem de ser codificado para não colidir com os outros parâmetros), links de partilha em redes sociais (o texto do tweet a partilhar deve ser codificado), APIs REST com filtros complexos, links deep dentro de aplicações móveis.
Erros comuns a evitar: codificar duas vezes — se vir '%2520' onde esperava '%20', o texto foi codificado uma vez e depois recodificado; usar encodeURI onde devia ter usado encodeURIComponent, preservando caracteres que deveriam ser codificados; esquecer que '+' pode representar espaço em application/x-www-form-urlencoded mas não em URLs propriamente ditas (onde '+' significa literalmente '+').
Este descodificador aceita ambas as convenções e reverte perfeitamente qualquer codificação feita por encodeURIComponent, encodeURI ou pelas rotinas equivalentes de Python, PHP, Java e outras linguagens.