Codificar / Descodificar URL
Codifica ou descodifica URLs e parâmetros de consulta em percentagem, modos seguro por componente e URI completa.
A carregar Codificar / Descodificar URL… Se nada acontecer, ativa o JavaScript.
A codificação em percentagem, vulgarmente chamada codificação de URL, é o mecanismo definido no RFC 3986 para representar com segurança caracteres arbitrários dentro de um Identificador Uniforme de Recursos. O sistema de endereçamento da internet foi concebido em torno do ASCII, por isso qualquer caractere fora de um pequeno conjunto seguro (espaços, letras acentuadas, pontuação, emoji ou binário em bruto) tem de ser substituído por um sinal de percentagem seguido de dois dígitos hexadecimais que representam o valor de byte do caractere em UTF-8. O esquema faz parte da web desde que Tim Berners-Lee definiu os URL no CERN em 1990 e foi formalmente normalizado no RFC 1738, mais tarde substituído pelo RFC 3986 em 2005.
Exemplos
hello world & co=1
hello%20world%20%26%20co%3D1
Codificação em percentagem (encodeURIComponent): o espaço torna-se %20.
hello world & co=1
hello+world+%26+co%3D1
Codificação de formulário (application/x-www-form-urlencoded): o espaço torna-se +.
Perguntas frequentes
Os meus dados são enviados para um servidor?
Que caracteres são considerados 'seguros' e ficam sem codificação?
Qual é a diferença entre os dois modos?
Porque é que um espaço por vezes se torna + e por vezes %20?
Há caracteres que nunca possam aparecer num URL mesmo codificados?
Esta ferramenta trata corretamente Unicode e emoji?
Posso usar isto para descodificar um URL que foi codificado duas vezes?
A codificação de URL é o mesmo que a codificação de entidades HTML?
Qual é a diferença entre um URI e um URL?
Porque é que codificar uma cadeia já codificada produz uma saída ilegível?
Sobre Codificar / Descodificar URL
A codificação de URL é incontornável sempre que constróis ou analisas endereços web por programação. Os valores de cadeia de consulta que contêm espaços, ampersands ou sinais de igual quebrariam a análise de parâmetros se ficassem sem codificação. Os envios de formulários usam por omissão application/x-www-form-urlencoded, que codifica tudo em percentagem e converte os espaços em +. Os clientes de API REST têm de codificar os segmentos de caminho que contêm barras ou pontos de interrogação para que o servidor não os interprete como caracteres estruturais. As cargas de webhooks, os URI de redirecionamento OAuth e os deeplinks dependem todos de uma codificação e descodificação cuidadosas para passar dados sem ambiguidade.
Esta ferramenta trata da codificação e descodificação em percentagem inteiramente no teu navegador. Oferece dois modos para corresponder às duas funções padrão do JavaScript. O modo por componente (equivalente a encodeURIComponent) destina-se a valores individuais (um termo de pesquisa, um nome de ficheiro, um parâmetro OAuth) e escapa tudo exceto os caracteres não reservados A-Z, a-z, 0-9, hífen, sublinhado, ponto e til. O modo URI completa (equivalente a encodeURI) preserva os caracteres estruturais de um URL completo (dois pontos, barra, ponto de interrogação, cardinal, ampersand, igual) e é útil quando queres normalizar um URL sem quebrar a sua estrutura. Como tudo corre localmente, nenhuma entrada é alguma vez enviada para um servidor.
Um erro comum é codificar um URL inteiro com encodeURIComponent: isto escapa os dois pontos e as barras, produzindo um endereço quebrado. Usa o modo por componente apenas em valores individuais antes de os montar num URL. Inversamente, esquecer de codificar valores que contêm & ou = dentro das cadeias de consulta leva a que os parâmetros sejam divididos ou fundidos em silêncio na extremidade recetora. Nota também que o caractere + significa um espaço apenas dentro dos corpos application/x-www-form-urlencoded; nos segmentos de caminho, um + literal deve ser codificado em percentagem como %2B.
Como a codificação em percentagem obteve o nome
A codificação em percentagem deve o nome ao literal sinal de percentagem (%) que usa como caractere de escape. Quando Tim Berners-Lee definiu a sintaxe de URL no CERN em 1990, precisava de uma forma de representar bytes arbitrários que fosse inequívoca em texto ASCII. Escolheu % porque era imprimível, raramente usado em identificadores e visualmente distinto, tornando as sequências codificadas fáceis de detetar num relance.
A especificação original de URL (RFC 1738, 1994) já exigia a codificação em percentagem para os caracteres inseguros, mas diferentes sistemas discordavam sobre que caracteres eram 'inseguros' e como tratar o Unicode. Foi preciso esperar até 2005, e até ao RFC 3986, para surgir um padrão definitivo, juntamente com um documento complementar (RFC 3987) que definia os IRI (Identificadores de Recursos Internacionalizados), que permitem caracteres Unicode diretamente na sintaxe.
Hoje, praticamente todas as linguagens de programação incluem uma função de codificação de URL na sua biblioteca padrão, mas persistem diferenças subtis: o urlencode() do PHP codifica os espaços como +, o urllib.parse.quote() do Python usa %20 e o encodeURIComponent() do JavaScript segue o RFC 3986. Esta diversidade é a razão pela qual as integrações de API entre linguagens por vezes têm dificuldades com desajustes de codificação: o mesmo caractere pode parecer completamente diferente consoante a biblioteca que o serializou.