Codifique ou decodifique qualquer texto de URL

Codifique em porcentagem um valor de consulta, um segmento de caminho ou uma URL inteira, ou transforme sequências %XX de volta em texto legível. Suporta UTF-8, espaços com + no estilo de formulário e um valor por linha. Nada sai do seu navegador.

Como codificar ou decodificar uma URL

  1. Cole o texto, o valor ou a URL na caixa de entrada.
  2. Escolha o tipo de codificação. Para um único valor de consulta ou segmento de caminho, mantenha Componente. Para um endereço inteiro em que só os espaços e as letras fora do ASCII precisam de conserto, escolha URL completa. Para dados que serão lidos como o envio de um formulário HTML, escolha Formulário.
  3. Clique em Codificar ou Decodificar. Com Um valor por linha marcado, cada linha é processada separadamente, então dá para converter de uma vez uma lista inteira de parâmetros ou de URLs.
  4. Copie o resultado ou clique em Usar o resultado como entrada para rodar de novo, por exemplo para desfazer um valor codificado duas vezes.

Ao decodificar uma URL completa que tem consulta, a ferramenta também lista o nome e o valor de cada parâmetro em texto simples, o jeito mais rápido de ler uma URL longa de rastreamento ou de redirecionamento.

O que é a codificação por porcentagem

Uma URL só pode conter um conjunto limitado de caracteres ASCII, e vários deles têm função: ? abre a consulta, & separa parâmetros, # abre o fragmento e / separa segmentos do caminho. A codificação por porcentagem é a forma de fazer entrar tudo o mais. Cada caractere é convertido nos seus bytes UTF-8 e cada byte é escrito como % mais dois dígitos hexadecimais. O espaço é um byte, então vira %20; o é tem dois bytes, %C3%A9; um emoji como 😀 tem quatro, %F0%9F%98%80. Decodificar faz o caminho inverso.

As regras vêm da RFC 3986, seção 2 (em inglês), o padrão que define a sintaxe de URIs. Ela recomenda dígitos hexadecimais em maiúsculas (%3A, não %3a), diz que o texto deve virar bytes UTF-8 antes de ser codificado e avisa que as implementações não devem codificar nem decodificar a mesma string mais de uma vez.

Caracteres reservados e não reservados (RFC 3986)

A RFC 3986 divide os caracteres que uma URL pode conter em dois grupos:

  • Não reservados: letras A–Z a–z, dígitos 0–9 e - . _ ~. Nunca precisam de codificação e significam a mesma coisa codificados ou não.
  • Reservados: os delimitadores gerais : / ? # [ ] @ e os subdelimitadores ! $ & ' ( ) * + , ; =. Eles podem carregar estrutura, então, sempre que um deles fizer parte dos seus dados e não da sintaxe da URL, precisa ser codificado por porcentagem.

Todo o resto, incluindo espaços, o próprio %, aspas, sinais de menor e maior e qualquer caractere fora do ASCII, não é permitido numa URL como está e sempre precisa de codificação. Os mais comuns:

CaractereCodificadoPor que importa
espaço%20 (ou + em dados de formulário)Não é permitido em URLs
&%26Abriria um novo parâmetro de consulta
=%3DSepararia o nome do parâmetro do valor
?%3FAbriria a string de consulta
#%23Mandaria tudo o que vem depois para o fragmento, que nunca é enviado ao servidor
/%2FCriaria um segmento de caminho a mais
+%2BÉ lido como espaço em consultas codificadas como formulário
%%25Seria lido como o começo de uma sequência de escape
: @%3A %40Delimitam esquema, credenciais e host
é%C3%A9Fora do ASCII, codificado nos seus dois bytes UTF-8

Componente, URL completa, RFC 3986 ou formulário: qual usar

A mesma entrada é codificada de modos diferentes conforme o destino do resultado. Para a entrada Tom & Jerry's (2024)/ü:

  • Componente dá Tom%20%26%20Jerry's%20(2024)%2F%C3%BC. É o encodeURIComponent do JavaScript, que codifica tudo, exceto letras, dígitos e - _ . ! ~ * ' ( ). Use para um valor de consulta, um segmento de caminho ou uma URL que você vai colocar dentro do parâmetro de outra URL, como o destino de um redirecionamento.
  • RFC 3986 estrito dá Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BC. Também codifica ! ' ( ) *, que a RFC 3986 reserva como subdelimitadores mesmo que o encodeURIComponent os deixe em paz. Use quando um analisador rigoroso ou um esquema de assinatura de requisições esperar exatamente o conjunto da RFC.
  • Formulário dá Tom+%26+Jerry%27s+%282024%29%2F%C3%BC. Segue o formato application/x-www-form-urlencoded do padrão WHATWG URL (em inglês): só letras, dígitos e * - . _ ficam como estão, e o espaço vira +. É o que um formulário HTML e o URLSearchParams enviam.
  • URL completa dá Tom%20&%20Jerry's%20(2024)/%C3%BC. É o encodeURI, que deixa ; / ? : @ & = + $ , # em paz porque presume que eles já cumprem a função numa URL completa. Use só para arrumar um endereço inteiro que tenha espaços ou texto fora do ASCII. Nunca use para um valor: um & dentro de um valor abriria um novo parâmetro sem avisar.

%20 ou +: espaços em URLs

Duas convenções convivem. Na sintaxe de URL da RFC 3986, o espaço é sempre %20 e o + é só um sinal de mais. No formato de formulário que os navegadores usam ao enviar um formulário por GET, o espaço é escrito como +, e o analisador WHATWG desse formato troca todo + por espaço antes de decodificar as porcentagens. Assim, ?q=a+b significa «a b» para um analisador de dados de formulário, enquanto /a+b num caminho significa «a+b».

Por isso o decodificador tem a opção Tratar + como espaço. Marque-a para consultas geradas por formulários, caixas de busca e a maioria das ferramentas de análise. Deixe desmarcada para caminhos e para valores em que o sinal de mais é de verdade, como um e-mail do tipo nome+etiqueta@example.com, que é codificado como nome%2Betiqueta%40example.com.

A mesma coisa em código

  • JavaScript: encodeURIComponent() e decodeURIComponent() para valores, encodeURI() para URLs inteiras e URLSearchParams para consultas no estilo de formulário, com espaços em + (veja o MDN).
  • Python: urllib.parse.quote() deixa a / sem codificar por padrão e escreve os espaços como %20, para caminhos; quote_plus() codifica a / e escreve os espaços como +, para valores de formulário (veja a documentação do Python).
  • PHP: rawurlencode() segue a RFC 3986 e escreve os espaços como %20; urlencode() escreve os espaços como + (veja o manual do PHP).

Problemas comuns de codificação de URL

Codificação dupla: %2520 em vez de %20

Se uma URL contém %2520, %253A ou algo parecido, alguma coisa codificou uma string já codificada; %25 é o sinal de porcentagem codificado. Decodifique uma vez e confira o resultado. A ferramenta avisa quando um resultado decodificado ainda tem sequências de porcentagem, e Usar o resultado como entrada deixa você decodificar a camada seguinte. A correção no código é codificar cada valor exatamente uma vez, na hora de montar a URL.

Erros de «Malformed URI sequence»

Decodificadores rigorosos rejeitam um % que não é seguido de dois dígitos hexadecimais e sequências de bytes que não são UTF-8 válido. Este decodificador é tolerante: decodifica cada sequência válida, deixa um % solto como está, troca bytes inválidos pelo caractere de substituição � e avisa que fez isso, para você achar o ponto quebrado em vez de não receber nada.

Um valor que é cortado no # ou no &

Se um parâmetro chega truncado, o valor continha um # ou um & sem codificar, em geral porque a URL foi montada por concatenação de strings ou com a codificação de URL completa. Codifique o valor no modo Componente.

Codificar a URL inteira quebra o link

Passar uma URL completa pelo modo Componente transforma https:// em https%3A%2F%2F. Isso só está certo se a URL for, ela mesma, o valor de um parâmetro dentro de outra URL. Caso contrário, codifique só a parte que você está inserindo ou use o modo URL completa.

Outras ferramentas de URL

Monte links de campanha completos com o gerador de UTM, tire parâmetros de rastreamento com o limpador de URLs ou veja cada salto de um link com o verificador de redirecionamento. Para empacotar um script como um favorito de um clique, o gerador de bookmarklets codifica o código por porcentagem para você. E se você salva páginas de referência, como a RFC, enquanto trabalha, o Marqly as guarda em uma única biblioteca pesquisável; veja o Marqly para desenvolvedores.

Perguntas frequentes

O que faz a codificação de URL?

Ela troca os caracteres inseguros ou que têm função dentro de uma URL por um sinal de porcentagem seguido de dois dígitos hexadecimais para cada byte UTF-8. Um espaço vira %20, o & vira %26 e o é vira %C3%A9. Assim qualquer texto pode viajar dentro de uma URL sem ser confundido com a estrutura da própria URL.

Qual é a diferença entre encodeURI e encodeURIComponent?

O encodeURIComponent codifica tudo, exceto letras, dígitos e - _ . ! ~ * ' ( ), então é a escolha certa para um valor de consulta ou um segmento de caminho. O encodeURI também deixa ; / ? : @ & = + $ , # intactos, porque presume que você está passando uma URL completa e já estruturada. Use o modo Componente para valores e o modo URL completa só para endereços inteiros.

O espaço deve ser %20 ou +?

Os dois estão certos, em lugares diferentes. O %20 funciona em qualquer ponto de uma URL. O sinal + só significa espaço em consultas codificadas como formulário (application/x-www-form-urlencoded), que é o que os formulários HTML e o URLSearchParams produzem. Em um caminho, o + é um sinal de mais de verdade. Ao decodificar uma consulta que veio de um formulário, marque Tratar + como espaço.

Por que a minha URL tem %2520?

Ela foi codificada duas vezes. Na primeira passada, o espaço virou %20; na segunda, o próprio % foi codificado como %25, o que dá %2520. A RFC 3986 diz que a mesma string não deve ser codificada nem decodificada mais de uma vez. Decodifique uma vez para ver se volta o %20 e depois decodifique de novo.

Dá para codificar ou decodificar várias URLs de uma vez?

Dá. Cole um valor por linha e mantenha Um valor por linha marcado. Cada linha é codificada ou decodificada separadamente, e as quebras de linha são preservadas em vez de virar %0A.

Quais caracteres precisam ser codificados?

Tudo o que estiver fora do conjunto não reservado da RFC 3986 (letras, dígitos, hífen, ponto, sublinhado e til) precisa ser codificado quando faz parte de um valor, e não da estrutura da URL. Isso inclui espaços, letras fora do ASCII, o %, e delimitadores reservados como ? # & = / : @ e +.

O meu texto é enviado para algum servidor?

Não. A codificação, a decodificação e a lista de parâmetros da consulta rodam no seu navegador, com funções nativas do JavaScript. Nada é enviado a um servidor.

← Ferramentas gratuitas

Início · Marqly