Como usar
- 1Escolha Codificar ou Decodificar e digite ou cole o seu texto – o resultado é atualizado enquanto você digita.
- 2Ao codificar, escolha o tipo certo: Componente para um único valor, como um termo de busca; URL completa para um endereço inteiro; ou Dados de formulário para escrever os espaços como
+. - 3Ao decodificar uma query string ou dados de formulário, ative “Tratar + como espaço”. Se o texto tiver uma sequência de escape quebrada, a ferramenta marca exatamente onde ela está.
- 4Para inspecionar um link, cole-o em “Analisar uma URL” para ver o host, a porta, o caminho, o fragmento e todos os parâmetros de consulta, decodificados.
O que é codificação de URL?
Uma URL só pode conter um conjunto limitado de caracteres ASCII. Todo o resto – espaços, letras acentuadas, emojis e caracteres com significado especial, como &, =, ? ou # – precisa passar pela codificação percentual: cada byte da forma UTF-8 do caractere é escrito como % seguido de dois dígitos hexadecimais. Um espaço vira %20, é vira %C3%A9 e € vira %E2%82%AC.
A codificação impede que os dados sejam confundidos com a estrutura da URL. Se um termo de busca contém & e você o deixa como está, o servidor divide o termo em dois parâmetros; escrito como %26, ele continua fazendo parte do valor.
Componente, URL completa ou dados de formulário?
A codificação de componente – o encodeURIComponent do JavaScript – codifica tudo, exceto letras, dígitos e - _ . ! ~ * ' ( ). Use-a para cada parte que você coloca em uma URL: um valor de parâmetro, um segmento de caminho, um destino de redirecionamento.
A codificação de URL completa – encodeURI – não mexe nos caracteres que estruturam uma URL, como : / ? # & =, e só codifica espaços, caracteres não ASCII e símbolos inseguros. Use-a para uma URL inteira que já está montada corretamente, nunca para valores isolados.
A codificação de formulário (application/x-www-form-urlencoded) é o que os navegadores enviam quando você envia um formulário HTML, e o que o URLSearchParams produz. Ela funciona como a codificação de componente, só que os espaços viram +. É por isso que + significa espaço na maioria das query strings – e por isso um sinal de mais de verdade precisa ser escrito como %2B.
Por que a decodificação pode falhar
Um % sempre precisa ser seguido de dois dígitos hexadecimais. Um texto como 100% sure não é uma codificação percentual válida: o próprio sinal de porcentagem deveria ter sido escrito como %25.
Os bytes por trás das sequências de escape também precisam formar UTF-8 válido. caf%E9 é como sistemas antigos codificavam “café” em Windows-1252 ou ISO-8859-1 – em UTF-8, é é %C3%A9. O decodificador marca a sequência exata que falha, para você saber se o texto foi cortado ou codificado com outro conjunto de caracteres.
Perguntas frequentes
O que significa %20 em uma URL?
%20 é um espaço codificado. Espaços não são permitidos em URLs, então são escritos como %20 – ou como + em query strings e dados de formulário. Os dois são decodificados como um espaço comum.
Os espaços devem ser codificados como %20 ou +?
No caminho, use sempre %20. Na query string, os dois funcionam na prática, porque os servidores decodificam dados de formulário tratando + como espaço. O %20 é seguro em qualquer lugar, enquanto o + só significa espaço em query strings e corpos de formulário.
Qual é a diferença entre encodeURI e encodeURIComponent?
O encodeURIComponent também codifica caracteres reservados, como / ? & = #, então é o certo para valores individuais. O encodeURI não mexe neles, para que uma URL completa continue funcionando. Usar encodeURI em um valor de parâmetro é um bug comum: um & dentro do valor acaba dividindo-o em dois parâmetros.
Por que aparece o erro “URI malformed”?
O decodeURIComponent do JavaScript lança esse erro quando um % não é seguido de dois dígitos hexadecimais ou quando os bytes escapados não são UTF-8 válido. Cole o texto no decodificador acima, e ele mostra qual sequência causa o erro e em qual posição.
Quais caracteres não precisam ser codificados em uma URL?
As letras A–Z e a–z, os dígitos 0–9 e - . _ ~ nunca precisam de codificação. Caracteres reservados, como : / ? # [ ] @ ! $ & ' ( ) * + , ; =, são permitidos onde têm seu significado especial, mas precisam ser codificados quando fazem parte dos dados.