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.
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: ! ' ( ) * - . _ ~
| Caractere | encodeURIComponent | encodeURI |
|---|---|---|
(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.