Pular para o conteúdo

Codificar URL

Faça a codificação percentual do texto para ele sobreviver em uma URL. Existem três codificações diferentes para três trabalhos diferentes, e escolher a errada é como os valores quebram sem aviso — por isso a página diz qual você quer.

  • Nunca armazenado
  • Sem fila, sem espera
  • Sem cadastro, sem marca d'água
Codificado

Codificado aparece aqui.

Como funciona

1

Cole seu texto

Qualquer texto, em qualquer idioma. Ele é codificado como UTF-8, que é o que todo servidor moderno espera.

2

Escolha o trabalho

Um valor que vai para uma query string, uma URL inteira já montada ou o envio de um formulário. A diferença importa, e cada um é explicado.

3

Copie o resultado

Codifique linha por linha se tiver uma lista inteira para fazer de uma vez.

Três respostas corretas, e por que um botão só está errado

A codificação percentual substitui um caractere por um % seguido do valor do byte em hexadecimal. A especificação divide os caracteres em três grupos, e tudo o que confunde nesse assunto vem daí. Os caracteres não reservados — letras, dígitos, hífen, ponto, sublinhado e til — nunca precisam ser codificados. Os caracteres reservados — as barras, pontos de interrogação, e-comerciais, sinais de igual e dois-pontos que dão estrutura a uma URL — precisam ser codificados *quando são dados* e não podem ser *quando são estrutura*. Todo o resto é sempre codificado.

É por isso que não existe uma única resposta certa. Codificar uma URL inteira precisa deixar as barras e o ponto de interrogação em paz, senão o endereço deixa de ser um endereço. Codificar um valor para colocar em um parâmetro de query precisa escapar e-comerciais e sinais de igual, senão um valor que contém um deles se divide em dois parâmetros. Codificar um segmento de caminho precisa escapar barras, senão um nome de arquivo com uma barra vira dois diretórios. Um botão único de Codificar escolhe um desses casos e erra nos outros dois terços — geralmente sem aviso, e geralmente de um jeito que só aparece com entradas incomuns.

O espaço é o caractere com mais história. Em uma URL, ele é %20. Em um formulário HTML enviado, é um +, que é uma codificação separada e mais antiga que sobrevive porque os formulários funcionam assim desde 1994. Os dois estão corretos no próprio contexto e nenhum está correto no contexto do outro, e é por isso que um sinal de mais em uma query string é ambíguo de um jeito que nenhum cuidado na hora de codificar consegue resolver.

Texto fora do ASCII é codificado primeiro em UTF-8 e depois byte a byte, então uma única letra acentuada vira duas sequências percentuais e um emoji vira quatro. A codificação dupla é o bug clássico: codificar algo já codificado transforma cada % em %25, então %20 vira %2520 e a outra ponta recebe um sinal de porcentagem literal. Se uma URL está cheia de %25, ela passou por um codificador a mais.

Quando você precisa de outra coisa

No código, use a função da própria linguagem e escolha-a com o mesmo cuidado que esta página exige. O JavaScript tem encodeURI para endereços inteiros e encodeURIComponent para valores; o Python tem urllib.parse.quote com um argumento safe que, por padrão, deixa as barras intactas; o PHP diferencia rawurlencode de urlencode, que diferem justamente na questão espaço versus sinal de mais descrita acima. Melhor ainda, monte URLs com um tipo URL em vez de juntar strings, e a questão desaparece.

Na linha de comando, jq -rR @uri codifica com segurança e lida com uma lista, e curl --data-urlencode monta um parâmetro corretamente codificado sem você precisar pensar em qual dos três casos está — é o único lugar em que isso é realmente fácil.

Perguntas frequentes

Qual das três devo usar?

Um valor, quase sempre. Use quando estiver codificando UM valor que vai entrar em uma query string ou em um segmento de caminho — um termo de busca, um endereço de e-mail, um destino de redirecionamento. É a única das três que escapa &, =, ? e /, que é exatamente o que impede o seu valor de escapar do parâmetro e virar dois parâmetros. Use Uma URL inteira só quando você já tem uma URL completa e quer apenas limpar os caracteres inseguros; ela deixa os caracteres estruturais em paz de propósito, para que a URL continue sendo uma URL. Use Dados de formulário quando estiver montando um corpo application/x-www-form-urlencoded, em que o espaço é + em vez de %20.

Por que o meu “&” quebrou a URL?

Porque ele não foi codificado, e & é como uma query string separa um parâmetro do próximo. Um valor como “Smith & Sons” acrescentado sem codificação a ?company= chega ao servidor como company=Smith e um segundo parâmetro, vazio, chamado “Sons”. É o bug de URL mais comum que existe, e a codificação de um valor resolve — ela transforma & em %26 para que o valor continue sendo um só.

Por que o meu “+” virou espaço?

Porque em uma query string + significa espaço — uma regra herdada dos formulários HTML que nada jamais conseguiu eliminar. Então um sinal de mais literal nos seus dados, em um número de telefone ou em uma string Base64, é lido como espaço pelo servidor que recebe. A codificação de um valor o escapa como %2B, que chega intacto.

Funciona com outros idiomas e emojis?

Sim. O texto é convertido primeiro em UTF-8 e depois codificado byte a byte, que é o que a RFC 3986 exige e o que todo servidor moderno espera. Japonês, árabe, latim com acentos e emojis vão e voltam exatamente iguais.

Por que ! ' ( ) * são codificados aqui quando outras ferramentas os deixam?

Porque o encodeURIComponent nativo do navegador deixa esses cinco intactos, e a RFC 3986 os lista como reservados. Alguns servidores e frameworks os tratam como estrutura, então um valor que os contém pode ser mal interpretado. Codificá-los é inofensivo — eles são decodificados de volta de forma idêntica em qualquer lugar — e elimina uma classe de bugs raros e difíceis de diagnosticar. É o que as implementações cuidadosas fazem.

Meu texto fica armazenado em algum lugar?

Não. Nada fica armazenado e nenhuma requisição é feita. Você pode se desconectar da internet depois que a página carregar, e ela continua funcionando.

Bom saber: Existem três respostas corretas diferentes, e a página faz você escolher, porque o botão único de Codificar de sempre erra em dois terços dos casos. Codificar uma URL inteira, um parâmetro de query e um segmento de caminho escapa caracteres diferentes; usar o errado quebra barras, sinais de mais ou e-comerciais sem aviso.

Coloque esta ferramenta no seu site

Grátis para qualquer blog, página de turma ou artigo de ajuda. Cole um único trecho de código e seus visitantes podem usá-la direto na sua página.