Entendendo a codificação de URL e o percent-encoding
O que esta ferramenta faz
Uma URL só consegue transportar com segurança um conjunto limitado de caracteres. Tudo que fica fora das letras, dígitos e alguns símbolos não reservados precisa ser reescrito como percent-encoding: um sinal % seguido do valor do byte em hexadecimal. Esta ferramenta converte texto comum nessa forma codificada e também faz o caminho inverso, devolvendo sequências como %20 e %26 aos caracteres que representam.
Três modos de codificação cobrem as situações que você realmente encontra. A codificação padrão reproduz o encodeURI do JavaScript e é voltada para uma URL inteira, então caracteres estruturais como :, /, ? e # permanecem intactos. A codificação de componente reproduz o encodeURIComponent e também escapa esses caracteres estruturais, que é o que você precisa para uma parte isolada, como o valor de um parâmetro. A codificação de formulário segue a regra application/x-www-form-urlencoded usada pelo navegador ao enviar um formulário.
Quando usar
Use a codificação de componente sempre que um valor entrar em uma query string: um termo de busca, um endereço de e-mail ou um destino de redirecionamento que contenha ?, & ou =. Codificá-lo evita que esses símbolos sejam lidos como estrutura da URL e quebrem o link. A codificação padrão combina com um endereço completo que você está limpando, onde entraram espaços ou letras acentuadas, mas as barras e o ponto de interrogação precisam manter o significado. A codificação de formulário corresponde ao corpo de uma requisição POST ou a uma carga de formulário montada à mão, onde os espaços viram + em vez de %20. Decodificar é igualmente comum: colar um link codificado vindo de um log, de um relatório de analytics ou de uma cadeia de redirecionamentos e ler para onde ele realmente aponta.
Um exemplo concreto
Pegue o texto hello world & café. Na codificação de componente, um espaço vira %20, o e comercial vira %26 e café — como o é é armazenado em dois bytes UTF-8 — vira caf%C3%A9. Na codificação de formulário, esse mesmo espaço é escrito como +, resultando em hello+world. As estatísticas ao vivo mostram quantos caracteres mudaram e qual parte da string foi codificada, um jeito rápido de identificar um texto que já vinha codificado.
Observações e casos extremos
Os caracteres reservados (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) têm significado dentro de uma URL, então o modo padrão os deixa de propósito intactos enquanto o modo de componente os escapa; escolher o modo errado é a causa comum de um parâmetro de query quebrado. A codificação é definida sobre bytes UTF-8, então qualquer caractere não ASCII se expande em vários grupos %XX. Evite codificar uma URL duas vezes: um % solto que já faz parte de um escape vira %25 e o link deixa de funcionar. Na dúvida, decodifique primeiro para verificar se o texto está cru ou já escapado.