Codificador de URL
Codifique um texto que precisa entrar em um endereço web, ou transforme um endereço codificado de volta em texto legível.
0 caracteres · 0 bytes
Resultado
Como componente único, barras e pontos de interrogação também são codificados. Sem a marcação a estrutura do endereço é preservada e só os caracteres inválidos recebem escape.
Como funciona
Endereços web só podem conter um conjunto limitado de caracteres. Todo o resto é escrito como um sinal de porcentagem seguido do valor do caractere em hexadecimal, e é por isso que um espaço vira %20.
A diferença entre os dois modos é o que conta como estrutura. Codificar um único componente também codifica barras, pontos de interrogação e sinais de igual, porque senão eles seriam lidos como partes do endereço.
Codificar um endereço inteiro deixa esses caracteres em paz para a estrutura sobreviver. Use esse modo em um endereço pronto que só contém alguns caracteres que precisam de escape.
Escolha o modo errado para um parâmetro e quem recebe pode ler um valor como vários. Um valor que vai depois de um sinal de igual quase sempre deve ser codificado como componente único.
O sinal de mais é uma armadilha: na parte de consulta de um endereço ele historicamente significa espaço, enquanto no caminho significa um mais de verdade.
As funções por trás dos modos
O modo de componente único usa encodeURIComponent e decodeURIComponent, do JavaScript, e o modo de endereço inteiro usa encodeURI e decodeURI, as quatro definidas no padrão ECMAScript. Cada caractere a ser codificado vira primeiro UTF-8, e cada byte é escrito como um sinal de porcentagem e dois dígitos hexadecimais. Como componente, pão & café R$5 vira, portanto, p%C3%A3o%20%26%20caf%C3%A9%20R%245. Como endereço inteiro, o e comercial e o cifrão ficam: p%C3%A3o%20&%20caf%C3%A9%20R$5. Um caractere que não pode ser escrito em UTF-8, como a metade solta de um par substituto deixada por uma cópia malfeita, gera uma mensagem de erro em vez de um resultado.
Caracteres que nunca são codificados
O ECMAScript deixa sem codificação, nos dois modos, as letras A–Z e a–z, os algarismos, o sublinhado, o hífen, o ponto, o ponto de exclamação, o til, o asterisco, o apóstrofo e os parênteses. A RFC 3986 considera não reservados só o hífen, o ponto, o sublinhado e o til; o ponto de exclamação, o apóstrofo, os parênteses e o asterisco pertencem aos delimitadores reservados e podem ter significado em alguns endereços.
O modo de endereço inteiro também deixa em paz o ponto e vírgula, a barra, o ponto de interrogação, os dois-pontos, a arroba, o e comercial, o sinal de igual, o mais, o cifrão, a vírgula e a cerquilha. Os colchetes, por outro lado, são codificados, então um endereço IPv6 em uma URL, como http://[::1]:8080/, vira http://%5B::1%5D:8080/.
Sinais de mais e formulários
Formulários são codificados como application/x-www-form-urlencoded, em que o URL Standard do WHATWG escreve o espaço como sinal de mais e também codifica o ponto de exclamação, o apóstrofo, os parênteses e o til. A ferramenta sempre escreve %20, e a decodificação não transforma o mais em espaço: a+b continua a+b. Se o texto vier de um formulário, troque antes os sinais de mais por espaços.
Erros de decodificação
A decodificação exige UTF-8 válido. %E3, que é o ã na antiga codificação Latin-1, gera a mensagem de erro, enquanto %C3%A3 dá ã. Um sinal de porcentagem que não é seguido de dois dígitos hexadecimais, como em a%2 cortado no meio, também é erro. No modo de endereço inteiro, delimitadores codificados ficam como estão: a%2Fb continua a%2Fb, porque uma barra decodificada mudaria a estrutura do endereço.