Codificar / Decodificar URL

Codifique um texto em porcentagem para uso seguro em uma URL, ou decodifique uma URL codificada de volta para texto legível — nos dois sentidos, ao vivo enquanto você digita.

1.049 visualizações

Como Funciona

Uma URL só consegue transportar com segurança um alfabeto pequeno: letras, dígitos e os quatro símbolos não reservados - _ . ~. Tudo o mais é reescrito como um trio %XX, em que XX é o valor hexadecimal do byte do caractere — isso é a codificação em porcentagem do RFC 3986. Os caracteres que estruturam uma URL (? # / : @ & =, o conjunto "reservado") também são codificados sempre que aparecem dentro de um valor em vez de atuarem como delimitadores, já que um & literal dentro de um valor de consulta seria lido como o início do próximo parâmetro.

Texto não-ASCII é codificado byte a byte, não caractere a caractere: a ferramenta converte sua string para UTF-8 primeiro, depois codifica em hexadecimal cada byte resultante. A letra turca "ç" tem dois bytes em UTF-8 (0xC3 0xA7), então vira dois blocos de porcentagem, %C3%A7 — não um único código. Um exemplo concreto: codificar İstanbul çayı & simit produz %C4%B0stanbul%20%C3%A7ay%C4%B1%20%26%20simit. Observe que o espaço vira %20, o & reservado vira %26, e cada letra acentuada se expande em sua própria sequência multibyte.

Na prática, essa distinção importa mais ao montar requisições manualmente: colar uma URL de webhook com um valor de consulta que alguém te enviou, decodificar um parâmetro de rastreamento de um e-mail de marketing, ou descobrir por que uma chamada de API falha porque um & ou # não codificado se infiltrou em um valor e foi lido como delimitador em vez de dado. Codificar o valor primeiro e depois substituir o resultado no modelo da URL evita exatamente esse tipo de erro.

O Que Saber

  • %20 vs +: a codificação em porcentagem do RFC 3986 sempre usa %20 para um espaço. A convenção + pertence a um padrão diferente e mais antigo — application/x-www-form-urlencoded, usado quando um formulário HTML envia dados — e só se aplica dentro desse formato específico de corpo, nunca dentro de um caminho ou de um valor de consulta devidamente codificado em porcentagem. Trocar os dois é uma fonte clássica de erros: um servidor que espera codificação de formulário lê um + perdido em uma string codificada em porcentagem como um sinal de mais literal, não como um espaço.
  • Codifique um componente, não a URL inteira: esta ferramenta foi feita para um único valor de consulta ou segmento de caminho. Passar o endereço inteiro (incluindo https://) pelo codificador também escaparia as barras e os dois-pontos que tornam a URL válida, quebrando-a por completo.
  • Mesmo mecanismo do seu navegador: ele chama as funções nativas encodeURIComponent/decodeURIComponent do navegador, então os resultados correspondem exatamente ao que um navegador real ou uma chamada fetch em JavaScript produziriam — não é uma aproximação.
  • A ida e volta não tem perdas: codificar uma string e depois decodificar o resultado sempre retorna exatamente os bytes originais, o que torna fácil verificar manualmente um trabalho de codificação decodificando-o de volta e comparando com o texto de origem.
  • Nada sai do seu navegador: a codificação e a decodificação rodam inteiramente no lado do cliente, instantaneamente, sem upload.

Perguntas Frequentes

Por que um espaço vira %20 e não +?

A codificação em porcentagem (RFC 3986) usa %20 para um espaço; a convenção + é específica do formato mais antigo application/x-www-form-urlencoded usado em corpos de formulário, não da codificação geral de URL. Esta ferramenta usa a forma padrão %20 — confundir os dois é uma fonte comum de erros ao montar strings de consulta manualmente.

Ela codifica a URL inteira ou só uma parte?

Foi projetada para codificar um único componente (um valor de consulta, um segmento de caminho) — codificar uma URL inteira incluindo "https://" também escaparia as barras e a quebraria, então codifique apenas a parte que precisa e depois cole esse trecho de volta no restante do endereço.

Por que caracteres turcos ou acentuados viram mais de um bloco %XX?

Porque a codificação trabalha com bytes, não com caracteres visíveis. O UTF-8 representa a maioria dos caracteres não-ASCII — como o ç, ğ, ı, ş do turco, ou emojis — usando de dois a quatro bytes, e cada byte recebe seu próprio par %XX. Por isso "ç" vira %C3%A7 (dois blocos), e um emoji pode se expandir para oito caracteres ou mais depois de codificado.

Qual é a diferença entre caracteres reservados e não reservados?

Caracteres não reservados (letras, dígitos, - _ . ~) são sempre seguros e nunca precisam de codificação. Caracteres reservados (? # / : @ & = e alguns outros) têm significado estrutural em uma URL — separam o caminho da consulta, ou um parâmetro do próximo — então só são codificados quando aparecem como dado literal dentro de um valor, não quando atuam como delimitadores.

Meu texto é enviado para algum lugar?

Não — a codificação e a decodificação acontecem instantaneamente no seu navegador; nada é enviado para um servidor.

Comentários

Ainda não há comentários — seja o primeiro a escrever um!

Ferramentas Semelhantes