Codificador e decodificador de URL
Para um valor de consulta ou um segmento de caminho. Codifica tudo, exceto letras, dígitos e - _ . ! ~ * ' ( ), igual ao encodeURIComponent.
Cole uma URL acima. As partes e os parâmetros aparecem aqui, prontos para editar.
Parâmetros de consulta
Esta URL não tem parâmetros de consulta.
Parâmetros do fragmento
Tudo roda no seu navegador e nada do que você cola é enviado. Isso importa, porque URLs costumam conter tokens e IDs de sessão.
Codifique e decodifique URL online enquanto digita: a ferramenta transforma espaços, letras acentuadas e símbolos como & ou ? em sequências com codificação percentual, como %20, e as converte de volta em texto legível. A segunda aba é um analisador de URL. Ela divide qualquer endereço em protocolo, host, caminho e parâmetros de consulta, que você pode editar, desativar ou limpar de tags de rastreamento, e grava de volta a URL corretamente codificada. Tudo acontece no seu navegador.
Como codificar e decodificar URL (URL encode e decode)
- Digite ou cole no campo da aba Codificar / Decodificar. O Resultado é atualizado a cada tecla.
- Escolha a Direção. Codificar deixa o texto seguro para uma URL, Decodificar transforma
caf%C3%A9%20au%20laitde volta emcafé au lait. Cole no campo vazio um texto com sequências como%20e a ferramenta passa sozinha para Decodificar (Codificar em vez disso volta atrás). Um texto simples que precisa de codificação, colado no modo Decodificar, muda para Codificar do mesmo jeito, com Decodificar em vez disso. - Ao codificar, escolha em Codificar como o que o texto é (veja a próxima seção). O padrão, Valor de parâmetro, serve para um único valor de consulta.
- Copiar coloca o resultado na área de transferência. Trocar move o resultado para a entrada e inverte a direção. É uma verificação rápida de ida e volta: decodificar o que você acabou de codificar deve devolver o texto original.
Cada caractere que a ferramenta alterou fica destacado no resultado. Passe o mouse sobre um deles para ver o caractere, o ponto de código Unicode e os bytes, por exemplo é U+00E9 %C3%A9. Abaixo dos campos aparecem o número de Caracteres, de Bytes UTF-8 e de Caracteres codificados (ou Caracteres decodificados). Ver um exemplo carrega a frase Oferta: 50% de desconto, pão & café? Sim!, que tem 41 caracteres, mas 43 bytes UTF-8, porque cada letra com til ou acento ocupa dois bytes.
Ao codificar, Cada linha separada codifica cada linha por conta própria e mantém as quebras de linha, o que serve para uma lista de valores ou de links. Sem essa opção, a quebra de linha também é codificada e vira %0A. Quando o texto é uma URL com parâmetros, a ferramenta oferece Dividir em partes, que abre o endereço na aba do analisador.
Codificar um parâmetro de URL, uma URL inteira ou dados de formulário
Nem todo caractere precisa ser codificado em todo lugar. Uma barra separa pastas em um caminho, mas é um dado comum dentro do valor de um parâmetro, então o resultado certo depende do que você codifica. Codificar como oferece quatro modos:
- Valor de parâmetro funciona como o
encodeURIComponentdo JavaScript e serve para um valor de consulta ou um segmento de caminho. Codifica tudo, exceto letras, dígitos e- _ . ! ~ * ' ( ), então um&,=,/ou?dentro do valor não consegue quebrar a URL. Codificarcafé & crèmeresulta emcaf%C3%A9%20%26%20cr%C3%A8me, pronto para colocar depois deq=. - URL inteira é para um endereço completo que só precisa de uma limpeza. Codifica espaços, caracteres não ASCII, caracteres de controle, o acento grave e
" < > \ ^ { | }, e mantém tudo o que dá estrutura a uma URL:: / ? # [ ] @ ! $ & ' ( ) * + , ; =. Assim,https://example.com/search?q=café au lait&lang=frvirahttps://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Sequências já codificadas ficam como estão, e um%isolado vira%25. Aqui está a diferença para oencodeURIdo JavaScript, que transforma um%20existente em%2520e codifica os colchetes de um endereço IPv6 comohttp://[2001:db8::1]:8080/. - Dados de formulário segue o formato application/x-www-form-urlencoded (em inglês), que os formulários HTML e o
URLSearchParamsproduzem. O espaço vira+, e só letras, dígitos e* - . _ficam sem codificação, então! ' ( ) ~também são codificados. - RFC 3986 estrito deixa sem codificação apenas os caracteres não reservados da RFC 3986 (em inglês): letras, dígitos e
- . _ ~. OAuth 1.0 (RFC 5849) e AWS Signature Version 4 exigem exatamente essa forma, porque uma assinatura só confere quando os dois lados codificam!ou*do mesmo jeito.
Os mesmos caracteres em cada modo:
| Caractere | Valor de parâmetro | URL inteira | Dados de formulário | RFC 3986 estrito |
|---|---|---|---|---|
| espaço | %20 | %20 | + | %20 |
& | %26 | & | %26 | %26 |
/ | %2F | / | %2F | %2F |
+ | %2B | + | %2B | %2B |
~ | ~ | ~ | %7E | ~ |
! | ! | ! | %21 | %21 |
* | * | * | * | %2A |
é | %C3%A9 | %C3%A9 | %C3%A9 | %C3%A9 |
O texto é sempre codificado em UTF-8 e os dígitos hexadecimais saem sempre em maiúsculas. Se a entrada já contém sequências como %20, um aviso informa isso e oferece Decodificar em vez disso, para que você não codifique o texto duas vezes por engano.
Para passar JSON em um parâmetro de consulta, minifique-o no formatador e validador de JSON e codifique como Valor de parâmetro: {"id":7,"tags":["a","b"]} vira %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Também funciona no sentido contrário: decodifique o parâmetro aqui e depois formate lá.
Problemas ao decodificar URL: sinais de mais, %2520 e sequências quebradas
Decodificar quase sempre funciona, mas quatro situações costumam atrapalhar. A ferramenta trata cada uma delas em vez de parar com um erro:
- O sinal de mais representa um espaço em dados de formulário e na maioria das strings de consulta. Decodificar + como espaço vem ativado por padrão, então
caf%C3%A9+au+laité decodificado comocafé au lait. Em uma URL inteira, só os sinais de mais depois do?contam como espaços, porque em um caminho o sinal de mais é um caractere comum. Desative a opção quando o sinal de mais for literal. Um sinal de mais que foi codificado como%2Bcontinua sempre sendo um sinal de mais. - A codificação dupla acontece quando duas camadas de código codificam o mesmo valor, algo contra o qual a RFC 3986 alerta de forma explícita. Cada
%vira%25, então um espaço passa de%20para%2520. Se o resultado decodificado ainda contém sequências como%20, a ferramenta avisa que o texto provavelmente foi codificado duas vezes e oferece Decodificar de novo. - Uma sequência inválida, um
%que não é seguido por dois dígitos hexadecimais, como em100%ou%G1, faz odecodeURIComponentdo JavaScript lançar um URIError. Aqui essas sequências ficam como estão, marcadas em vermelho e contadas, e o restante do texto é decodificado. - Links antigos em Latin-1 vêm da época anterior ao UTF-8, quando alguns sites codificavam
écomo o byte único%E9.caf%E9não é UTF-8 válido, então odecodeURIComponentfalha e ounquotedo Python retornacafseguido do caractere de substituição U+FFFD. A ferramenta lê esses bytes como Windows-1252, decodificacaf%E9comocafée acrescenta um aviso dizendo isso.
Caracteres de controle no texto decodificado, como uma tabulação ou um byte nulo, aparecem como símbolos visíveis, por exemplo ␉ e ␀, mas Copiar copia o texto real.
Analisador de URL: dividir uma URL e editar os parâmetros de consulta
Cole um endereço no campo URL da aba Analisar e editar URL e ele é dividido em Protocolo, Host, Porta, Caminho e Fragmento, além de Usuário e Senha quando a URL os contém. Os valores aparecem decodificados, então a aba também é a forma mais rápida de decodificar parâmetros de URL: você lê tênis masculino em vez de t%C3%AAnis+masculino. A edição funciona nos dois sentidos, como a barra de endereços e a tabela de parâmetros do Postman. Altere um campo e a URL é reescrita na hora, corretamente codificada; altere a URL e todas as partes são lidas de novo. As partes em que você não mexe ficam exatamente como estavam, caractere por caractere.
A tabela Parâmetros de consulta lista cada parâmetro com seu Nome e Valor. Desmarque Incluir na URL para deixar um parâmetro de fora sem apagá-lo, o que ajuda quando você procura o parâmetro que quebra uma requisição. Adicionar parâmetro, Remover parâmetro e Ordenar de A a Z fazem o que dizem. Nomes repetidos como tag=a&tag=b e nomes sem valor como ?debug são mantidos. Espaços nos parâmetros decide se os espaços são escritos como %20 ou +; por padrão, segue a URL que você colou.
Links de login e de pagamento costumam levar uma segunda URL dentro de um parâmetro, codificada para que seus próprios ? e & não se misturem com os da URL externa:
https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2
Um valor que é ele mesmo uma URL, normalmente em redirect_uri, return, url ou next, ganha o botão Editar a URL interna. O endereço interno https://app.example.com/callback?tab=2 abre como um nível próprio, com suas partes e parâmetros, uma trilha de navegação (URL principal › redirect_uri) leva de volta, e cada alteração é codificada de volta na URL externa. Copiar URL principal copia o resultado. Isso funciona em vários níveis de profundidade.
Quando a parte depois do # parece parâmetros, como #access_token=...&state=... no fluxo implícito do OAuth ou #/search?q=shoes nas rotas de aplicativos de página única, uma segunda tabela, Parâmetros do fragmento, também os lista.
O analisador também aponta problemas: uma URL sem protocolo, que os navegadores tratam como um link relativo; uma porta fora do intervalo de 0 a 65535; e caracteres que precisam ser codificados, como espaços, letras acentuadas, " ou <, o que Codificar esses caracteres resolve em um passo. Um texto sem endereço, como a=1&b=2, é lido como uma string de consulta. Para um nome de domínio internacionalizado (em inglês), a ferramenta mostra a forma Punycode que o DNS e os navegadores usam, então münchen.de vira xn--mnchen-3ya.de, e um domínio que começa com xn-- ganha a forma legível.
Copiar URL copia o endereço pronto, Abrir o abre em uma nova aba (só links http e https) e Copiar como JSON entrega os parâmetros como um objeto JSON, com nomes repetidos reunidos em um array.
Remover UTM e outros parâmetros de rastreamento de uma URL
Links de newsletters, anúncios e redes sociais carregam parâmetros que só informam ao site de onde o visitante veio. Os parâmetros UTM utm_source, utm_medium, utm_campaign, utm_term e utm_content remontam à Urchin, antecessora do Google Analytics. IDs de clique como fbclid (Facebook), gclid (Google Ads) e msclkid (Microsoft Advertising) são acrescentados pelas próprias plataformas.
O analisador marca esses parâmetros com uma tag rastreamento, e Remover rastreamento (n) apaga todos de uma vez. Além de qualquer parâmetro utm_*, reconhece mais de 20 outros, como ttclid (TikTok), mc_cid (Mailchimp) e _hsenc (HubSpot). Os parâmetros de que a página precisa continuam no lugar: no link de loja de Ver um exemplo, Remover rastreamento (4) remove utm_source, utm_medium, utm_campaign e fbclid e mantém q, size, return e o fragmento #reviews.
Vale limpar aqui primeiro um link que vai virar um código QR. Sem os parâmetros de rastreamento ele fica mais curto, e um link mais curto gera um código menos denso, mais fácil de escanear.
O que é a codificação percentual e como os caracteres viram %XX
A codificação percentual, também chamada de codificação de URL, escreve um caractere como % seguido de dois dígitos hexadecimais. Uma URL só pode conter um conjunto limitado de caracteres ASCII, e alguns deles têm uma função: ? inicia a consulta, & separa parâmetros, # inicia o fragmento. A RFC 3986 chama esses de caracteres reservados (: / ? # [ ] @ e ! $ & ' ( ) * + , ; =). Letras, dígitos e - . _ ~ são não reservados e nunca precisam de codificação. Todo o resto, e todo caractere reservado usado como dado comum, é codificado.
Caracteres fora do ASCII viram primeiro bytes UTF-8, e cada byte ganha seu próprio %XX:
éé U+00E9, que o UTF-8 guarda como os dois bytes C3 A9, então vira%C3%A9.€é U+20AC, três bytes:%E2%82%AC.- Um emoji como U+1F600 (rosto sorridente) ocupa quatro bytes:
%F0%9F%98%80.
%c3%a9 e %C3%A9 significam a mesma coisa, mas a RFC 3986 recomenda maiúsculas, que é o que a ferramenta escreve. Uma tabela de codificação percentual dos caracteres que você encontra com mais frequência:
| Caractere | Codificado | Caractere | Codificado |
|---|---|---|---|
| espaço | %20 | + | %2B |
! | %21 | , | %2C |
" | %22 | / | %2F |
# | %23 | : | %3A |
$ | %24 | ; | %3B |
% | %25 | = | %3D |
& | %26 | ? | %3F |
' | %27 | @ | %40 |
( | %28 | [ | %5B |
) | %29 | ] | %5D |
* | %2A | quebra de linha | %0A |
Codificar URL em JavaScript, Python e PHP
Toda linguagem tem funções para isso, e elas diferem principalmente no tratamento de espaços, barras e ! ' ( ) * ~.
O JavaScript tem encodeURIComponent para um valor, encodeURI para um endereço inteiro e URLSearchParams para a codificação de formulário:
encodeURIComponent("café & crème") // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café") // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString() // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9") // "café"
O decodeURIComponent não transforma + em espaço, e lança um URIError diante de uma sequência inválida como 100%.
No Python, as funções ficam em urllib.parse. O quote mantém / por padrão (safe='/') e, fora isso, codifica tudo, exceto os caracteres não reservados da RFC 3986. O quote_plus escreve espaços como + e codifica / também:
from urllib.parse import quote, quote_plus, urlencode, unquote_plus
quote("café & crème/brûlée") # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="") # 'a%20b%2Fc'
quote_plus("café & crème/brûlée") # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2}) # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait") # 'café au lait'
No PHP, o urlencode codifica como um formulário HTML e escreve o espaço como +, enquanto o rawurlencode segue a RFC 3986 e escreve %20:
urlencode("café & crème"); // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème"); // "caf%C3%A9%20%26%20cr%C3%A8me"
O rawurlencode dá o mesmo resultado que RFC 3986 estrito. O urlencode equivale a Dados de formulário, exceto pelo *, que ele codifica como %2A.
Perguntas frequentes
O espaço deve ser codificado como %20 ou +?
%20 funciona em qualquer lugar de uma URL. Um + significa espaço apenas na string de consulta e em dados de formulário, o formato que os formulários HTML enviam. Em um caminho, + é um sinal de mais comum, então /a+b continua /a+b. Quando um valor de consulta precisa de um sinal de mais de verdade, escreva %2B. Na ferramenta, Dados de formulário escreve os espaços como + e os outros três modos como %20.
O que significam %20, %2F e %3D em uma URL?
São caracteres codificados: %20 é um espaço, %2F uma barra e %3D um sinal de igual. Outros que aparecem com frequência são %26 (&), %3F (?), %3A (:), %2C (vírgula) e %27 (apóstrofo). Os dois dígitos são o código do caractere em hexadecimal. Letras acentuadas e outros caracteres não ASCII ocupam de dois a quatro desses pares, como %C3%A9 para é. Cole a string inteira no decodificador para lê-la.
Qual é a diferença entre encodeURI e encodeURIComponent?
O encodeURI é feito para um endereço inteiro e deixa em paz os caracteres que o estruturam, como : / ? # & =. O encodeURIComponent é feito para uma parte, o valor de um parâmetro ou um segmento de caminho, e codifica esses caracteres também, então https://example.com/?a=1&b=2 vira https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. Nesta ferramenta, Valor de parâmetro equivale ao encodeURIComponent, e URL inteira é como o encodeURI, mas mantém sequências existentes como %20 em vez de transformá-las em %2520.
Como remover parâmetros UTM de uma URL?
Cole o link na aba Analisar e editar URL e clique em Remover rastreamento (n). Isso apaga de uma vez todas as tags utm_* e IDs de clique como fbclid e gclid. Depois clique em Copiar URL. Para tirar só alguns, use Remover parâmetro nas linhas que você não quer.
Codificação de URL é a mesma coisa que criptografia ou Base64?
Não. A codificação de URL não esconde nada: qualquer pessoa pode decodificar caf%C3%A9 de volta para café, então ela nunca protege uma senha ou um token. Ela só deixa os caracteres seguros para uso em um endereço. Base64 é outra codificação, que transforma qualquer dado, inclusive arquivos binários, em uma string de 64 caracteres. Uma string Base64 em uma URL ainda precisa ter +, / e = codificados, a menos que você use a variante segura para URL, que o codificador e decodificador Base64 consegue gerar.
As URLs que eu colo são enviadas ou armazenadas?
Não. A codificação, a decodificação e a análise rodam no seu navegador, e nada do que você cola é enviado a um servidor. Isso importa, porque URLs costumam conter tokens de acesso, IDs de sessão ou códigos de redefinição de senha. O navegador lembra apenas a aba e as opções escolhidas, nunca os textos. A única coisa que carrega o endereço é Abrir, que o abre em uma nova aba, como se você clicasse no link.
Mais ferramentas para programadores estão na categoria Desenvolvedores, e as ferramentas que transformam um formato em outro estão reunidas em Conversores. Para achar o que difere entre duas URLs longas, por exemplo uma chamada de API que funciona e outra que falha, cole as duas no comparador de textos e compare por caracteres.