UltKit

Codificar e decodificar URL

Deixe um texto seguro para colocar em uma URL ou transforme sequências como %20 de volta em caracteres legíveis. A ferramenta usa as próprias funções encodeURIComponent, encodeURI e decodeURIComponent do seu navegador, lista os parâmetros da query em uma tabela e não envia nada para nenhum servidor.

Modo

0 caracteres · 0 palavras · 0 linhas

0 caracteres · 0 palavras · 0 linhas

Funciona inteiramente nesta aba do navegador. Seu texto nunca é enviado nem armazenado.

O que cada função escapa

Calculado com as próprias funções do navegador. O encodeURIComponent deixa intactos letras, dígitos e estes sinais: ! ' ( ) * - . _ ~

CaractereencodeURIComponentencodeURI
(espaço)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Percent-encoding e os caracteres reservados da RFC 3986

Uma URL só pode conter um conjunto limitado de caracteres ASCII. A RFC 3986, a especificação de 2005 para a sintaxe de URI, divide esses caracteres em dois grupos. Os caracteres não reservados, A–Z, a–z, 0–9 e os quatro símbolos - . _ ~, nunca precisam ser codificados. Os caracteres reservados têm funções: os delimitadores gerais : / ? # [ ] @ separam esquema, host, caminho, consulta e fragmento, e os subdelimitadores ! $ & ' ( ) * + , ; = separam itens dentro deles, como & e = fazem em uma query string. Todo o resto, e qualquer caractere reservado usado como dado comum, precisa ser codificado com porcentagem.

A codificação por porcentagem escreve um byte como % seguido de dois dígitos hexadecimais. O texto é convertido primeiro para UTF-8, então um espaço vira %20, um é (dois bytes) vira %C3%A9 e um emoji vira quatro grupos %XX. É por isso que uma busca por "café & bar" aparece em um link como caf%C3%A9%20%26%20bar: o & é codificado para que o servidor não o leia como o início de um novo parâmetro.

encodeURIComponent, encodeURI e decodificação

encodeURIComponent é a escolha certa para uma parte isolada, como o valor de uma consulta, um segmento de caminho ou uma URL de redirecionamento passada como parâmetro. Ele escapa tudo, exceto os caracteres não reservados e ! ' ( ) *, que o JavaScript deixa passar por razões históricas. encodeURI (URL inteira) presume que a entrada já é um endereço completo e mantém os caracteres reservados intactos, então em https://example.com/a b?q=1 apenas o espaço é codificado. Usar encodeURI no valor de um parâmetro é um erro clássico: um & ou # dentro do valor permaneceria e quebraria a URL.

Decodificar reverte qualquer uma das duas funções. Formulários HTML enviados com GET usam o formato mais antigo application/x-www-form-urlencoded, em que o espaço é escrito como + em vez de %20; mantenha Tratar + como espaço marcado para esses casos e desmarque quando um sinal de mais literal for importante, como em um número de telefone. Se a entrada tiver um % que não é seguido por dois dígitos hexadecimais, ou bytes que não são UTF-8 válido, a decodificação falha com uma mensagem clara em vez de adivinhar. Quando o texto contém uma query string, os parâmetros aparecem decodificados em uma tabela abaixo da ferramenta. Para dados binários em URLs, Base64url costuma ser a alternativa.

Perguntas frequentes

Um espaço na URL deve virar %20 ou sinal de mais?
Em caminhos e nos termos da RFC 3986, o espaço é %20. A forma + só significa espaço dentro de query strings codificadas do modo como os formulários HTML as codificam, então %20 é a escolha segura em qualquer lugar.
Por que minha URL ficou com %2520?
Foi codificado duas vezes. Na primeira passada, o espaço virou %20, e na segunda o próprio % foi codificado como %25. Decodifique uma vez para desfazer a camada extra e codifique os valores em um único ponto do seu código.
Quais caracteres nunca precisam de percent-encoding?
O conjunto não reservado da RFC 3986: as letras de A a Z, maiúsculas e minúsculas, os dígitos de 0 a 9, e o hífen, o ponto, o sublinhado e o til.
Uma URL pode ter letras acentuadas ou de outros alfabetos sem codificação?
Os navegadores os exibem, mas na rede todo caractere não ASCII em um caminho ou consulta é enviado como UTF-8 codificado com porcentagem. Nomes de domínio usam um sistema à parte, o Punycode, que os transforma em rótulos xn--.
Por que a decodificação acusa uma sequência malformada?
O texto tem um % que não é seguido por dois dígitos hexadecimais, como um "100%" literal, ou os bytes decodificam para UTF-8 inválido. Codifique os sinais % soltos como %25 antes de decodificar.