Utilia

Codificador e descodificador de URL

Codificador e descodificador de URL gratuito. Codifica parâmetros ou URLs completos, descodifica sequências %XX e trata + como espaço, no navegador.

Modo

Como usar o codificador e descodificador de URL

  1. Escolhe Codificar para converter texto numa forma segura para URL, ou Descodificar para transformar texto com percent-encoding de volta em caracteres legíveis.
  2. Ao codificar, escolhe um modo: Componente para um único valor (como um parâmetro de consulta ou um segmento do caminho), ou URL completo para codificar um endereço inteiro mantendo a sua estrutura.
  3. Ao descodificar dados vindos de um formulário HTML ou de uma query string, ativa Tratar + como espaço para que os sinais + passem a espaços.
  4. Cola o teu texto e copia o resultado. Se uma sequência de percentagem estiver malformada, a ferramenta indica um erro em vez de adivinhar.

O que é a codificação de URL?

Os URLs só podem conter um conjunto limitado de caracteres ASCII. Alguns caracteres, como /, ?, #, & e =, são reservados, porque separam as partes de um endereço: o caminho, a query string e o fragmento. Outros, como espaços, aspas, letras acentuadas ou emojis, simplesmente não são permitidos. A codificação de URL, também chamada percent-encoding, resolve os dois problemas substituindo cada byte problemático por um % seguido de dois algarismos hexadecimais.

O texto é primeiro convertido em bytes UTF-8, e cada byte é codificado separadamente. Um espaço passa a %20, um «e» comercial passa a %26, ç (dois bytes em UTF-8) passa a %C3%A7 e o emoji 😀 (quatro bytes) passa a %F0%9F%98%80. Os caracteres não reservados, ou seja, letras ASCII, algarismos e - _ . ~, nunca precisam de ser codificados.

Modo componente ou modo URL completo

Escolher o modo certo é a decisão mais importante, e errar é uma fonte clássica de bugs.

O modo Componente funciona como o encodeURIComponent do JavaScript. Codifica todos os caracteres reservados, para que o resultado possa ser colocado com segurança dentro de uma parte de um URL. Usa-o para valores de parâmetros, segmentos de caminho ou qualquer coisa que um utilizador tenha escrito. Por exemplo, o termo de pesquisa rock & roll passa a rock%20%26%20roll. Se não codificasses o &, o servidor leria roll como o início de um novo parâmetro.

O modo URL completo funciona como o encodeURI. Parte do princípio de que a entrada já é um endereço completo e preserva os caracteres que lhe dão estrutura, como : / ? # & e =, codificando os espaços e os caracteres não ASCII. Usa-o para limpar um endereço como https://example.com/café menu?q=chá, que fica https://example.com/caf%C3%A9%20menu?q=ch%C3%A1. Não o uses em valores individuais: um & dentro de um valor ficaria por codificar e estragaria a query string.

Uma boa regra prática: constrói os URLs a partir das partes, codifica cada valor no modo componente e usa o modo URL completo apenas para endereços que já recebes montados.

O sinal + e a codificação de formulários

Os formulários HTML enviados com application/x-www-form-urlencoded codificam os espaços como + em vez de %20. É por isso que os URLs de pesquisa têm muitas vezes este aspeto: ?q=bom+dia. A descodificação padrão deixa o + como está, porque num caminho um sinal de mais é apenas um sinal de mais. Quando descodificas uma query string ou dados de formulário, ativa Tratar + como espaço para obteres bom dia. Deixa a opção desligada para caminhos e para valores em que um + literal importa, como números de telefone ou dados Base64. Um sinal de mais verdadeiro em dados de formulário é enviado como %2B, por isso é descodificado corretamente em qualquer caso.

Privacidade

A codificação e a descodificação correm inteiramente no teu navegador. Nada do que colas, incluindo URLs que possam conter tokens, IDs de sessão ou dados pessoais, é enviado para um servidor ou guardado.

Perguntas frequentes

Porque é que a descodificação falha com um erro de «malformado»?

Um % tem de ser seguido de exatamente dois algarismos hexadecimais, e os bytes resultantes têm de formar UTF-8 válido. Cadeias como 100%, %G1 ou uma sequência truncada como %E2%82 não podem ser descodificadas com fiabilidade, por isso a ferramenta assinala o problema em vez de produzir texto incorreto. Para incluíres um sinal de percentagem literal, codifica-o como %25.

Qual é a diferença entre %20 e +?

Ambos podem representar um espaço, mas em contextos diferentes. %20 é válido em qualquer parte de um URL. + só significa espaço em query strings codificadas como formulário; noutros sítios é um sinal de mais literal.

Devo codificar um URL inteiro no modo componente?

Só se o URL inteiro for ele próprio um valor dentro de outro URL, por exemplo num parâmetro redirect=. Nesse caso, o modo componente é exatamente o certo: https://a.com/?x=1 passa a https%3A%2F%2Fa.com%2F%3Fx%3D1.

Porque é que o meu texto aparece codificado duas vezes?

A codificação dupla acontece quando um texto já codificado volta a ser codificado, transformando %20 em %2520. Descodifica uma vez para confirmar, e garante que cada valor só é codificado no momento em que é inserido no URL.

A codificação de URL esconde ou protege os dados?

Não. O percent-encoding é totalmente reversível e não dá qualquer segurança. Os valores sensíveis nos URLs podem acabar no histórico do navegador e nos registos dos servidores, por isso evita de todo pôr segredos em URLs.