ToolActToolAct

Codificador/Decodificador URL

Codifique e decodifique URLs rapidamente com múltiplos modos de codificação

Entrada
Caracteres: 0
Bytes: 0
Saída
Caracteres: 0
Bytes: 0

Selecione Método de Conversão

O que é Codificação URL?

A codificação URL (também chamada de codificação porcentual) é um mecanismo para converter caracteres em um formato que pode ser transmitido com segurança em uma URL. Como as URLs só podem conter certos caracteres do conjunto ASCII, outros caracteres (como acentos, espaços e símbolos especiais) devem ser codificados no formato %XX, onde XX é o valor hexadecimal do caractere. Por exemplo: um espaço é codificado como %20, e o caractere ç é codificado como %C3%A7. A codificação URL transforma caracteres em uma forma segura para transmissão dentro de URLs. Espaços, texto não ASCII, caracteres reservados e símbolos podem ser percent-encoded conforme o contexto. O ponto principal é distinguir URL completa, segmento de caminho, parâmetro de query, corpo de formulário ou fragmento, pois cada posição tem regras diferentes. Codificação dupla ou ausente pode quebrar links, requisições de API, assinaturas, redirecionamentos e parâmetros de busca.

Como Usar

Como usar

  1. Insira ou cole o texto a codificar/decodificar na caixa de entrada
  2. Selecione o método de codificação: encodeURIComponent ou encodeURI
  3. Os resultados aparecem automaticamente, com cópia em um clique ou troca de entrada/saída
  4. Para decodificar, selecione o método de decodificação correspondente

Contexto de URL

  • Use a codificação de componente para valores de consulta e segmentos de caminho; codificar uma URL inteira com a função errada pode quebrar separadores como /, ? e &.
  • Ao decodificar, verifique se há dupla codificação, como %2520, o que significa que o sinal de porcentagem foi codificado novamente.

Casos de uso

Codificar parâmetros de consulta com segurançaUse o modo encodeURIComponent quando um valor ficará dentro de um parâmetro de query de URL, segmento de caminho ou payload semelhante a formulário. Ele codifica caracteres reservados de forma mais agressiva que encodeURI e mostra contagens de caracteres e bytes.
Codificar ou decodificar URLs completasMude para encodeURI ou decodeURI ao trabalhar com uma URL completa e quiser que separadores como : / ? & retenham seu significado estrutural. Os modos de componente e URI completa são mantidos separados para evitar sobrecodificação acidental.
Recuperar texto legível a partir de escapes percentuaisDecodifique strings de componente ou URI completa e troque a saída válida de volta para a entrada com o modo oposto. Erros de transformação de sequências percentuais malformadas são exibidos na saída e bloqueados da troca.
Inspecionar corpos de formulário codificadosMude para a visualização application/x-www-form-urlencoded para ver como '+' e '%20' diferem para espaços, depois decodifique um payload x-www-form-urlencoded copiado do DevTools para recuperar as chaves originais.
Distinguir caracteres reservados vs não reservados conforme RFC 3986Ao depurar uma incompatibilidade de assinatura ou um erro 400 de uma API restrita, o primeiro passo é verificar se cada byte pertence ao conjunto reservado ou não reservado. Escolher %20 para espaços ou '+' para corpos de formulário depende de onde o valor codificado será usado.

Princípio técnico

A codificação URL (codificação percentual) é definida pela RFC 3986 §2.1 e transforma caracteres no formato %XX, onde XX é a representação hexadecimal maiúscula de dois dígitos do valor do byte em UTF-8. A RFC define duas classes de caracteres: caracteres não reservados (A-Z a-z 0-9 - _ . ~) que nunca são codificados, e caracteres reservados (gen-delims : / ? # [ ] @ e sub-delims ! $ & ' ( ) * + , ; =) cuja codificação depende do contexto — eles carregam significado estrutural em alguns componentes de URL, mas são dados literais em outros. O JavaScript fornece duas funções nativas com escopos diferentes. encodeURIComponent() codifica todo caractere exceto A-Z a-z 0-9 - _ . ! ~ * ' ( ) — esta é a escolha correta para codificar valores individuais de parâmetros de consulta, segmentos de caminho e identificadores de fragmento. encodeURI() preserva adicionalmente os caracteres estruturais : / ? # [ ] @ ! $ & ' ( ) * + , ; = e é projetada para codificar URIs completas mantendo sua estrutura sintática intacta. A distinção crítica é que encodeURIComponent() codifica / e &, o que quebraria uma URL se aplicado à string inteira, enquanto encodeURI() os preserva. O tratamento de espaços é a armadilha de interoperabilidade mais comum. A RFC 3986 especifica %20 como a codificação percentual canônica para o caractere de espaço (U+0020). Entretanto, o tipo MIME application/x-www-form-urlencoded (usado por envios de formulário HTML desde o HTML 4.01) codifica espaços como +. Os dois não são intercambiáveis: um servidor esperando %20 interpretará + literalmente, e um servidor esperando + tratará %20 como um sinal de porcentagem literal seguido de 20. A ferramenta usa encodeURIComponent() que produz %20, compatível com a RFC 3986. Usuários decodificando payloads x-www-form-urlencoded (de corpos POST ou strings de consulta analisadas por middleware legado) devem estar cientes dessa diferença. O tratamento de caracteres multibyte é automático, mas vale a pena entender: a string de entrada é primeiro codificada em bytes UTF-8, depois cada byte é individualmente percent-encodado. Um caractere CJK como '你' (U+4F60) ocupa 3 bytes UTF-8 (E4 BD A0), produzindo %E4%BD%A0. Se o servidor analisar com um charset diferente como GBK, o mesmo caractere é codificado como %C4%E3 (2 bytes), e o resultado decodificado será ilegível a menos que ambas as partes concordem com UTF-8. A codificação dupla é outro bug comum: %2520 significa um sinal de porcentagem literal (%25) seguido de 20, indicando que a entrada já estava percent-encodada e foi codificada uma segunda vez. O modo de decodificação captura sequências malformadas (%XX incompleto) e exibe o erro em vez de produzir silenciosamente lixo.

  • encodeURIComponent vs encodeURI: encodeURIComponent codifica / ? & # e é correto para valores de consulta, segmentos de caminho e fragmentos; encodeURI preserva esses caracteres estruturais e é correto para URLs completas — usar a função errada é o bug de codificação URL mais comum.
  • Conjuntos de caracteres reservados da RFC 3986: gen-delims (: / ? # [ ] @) carregam sintaxe de URL; sub-delims (! $ & ' ( ) * + , ; =) podem ser delimitadores ou dados dependendo do componente da URL — o contexto determina se um caractere reservado é percent-encodado.
  • Codificação de espaço: A forma canônica da RFC 3986 é %20 (produzida por encodeURIComponent); application/x-www-form-urlencoded usa + (padrão de formulário HTML) — os dois são semanticamente incompatíveis e misturá-los quebra analisadores do lado do servidor.
  • Codificação multibyte UTF-8: '你' (U+4F60) → bytes UTF-8 E4 BD A0 → %E4%BD%A0 (3 octetos percent-encodados); o mesmo caractere em GBK → %C4%E3 (2 octetos) — concordância de charset entre cliente e servidor é obrigatória para texto não ASCII.
  • Detecção de codificação dupla: %2520 decodifica primeiro para %20 e depois para espaço — a saída do modo de decodificação revela esse padrão; sequências malformadas como %ZZ ou %2 (incompleto) são capturadas e reportadas como erros.
  • IRI (RFC 3987): Identificadores de Recursos Internacionalizados permitem caracteres Unicode diretamente em URLs; navegadores exibem a forma decodificada na barra de endereço, mas transmitem a forma UTF-8 percent-encodada na rede — o modo de codificação da ferramenta mostra o que realmente passa pelo HTTP.
  • Tratamento de erros de decodeURIComponent: Passar uma string com uma sequência percentual incompleta (% seguido de menos de 2 dígitos hexadecimais) lança um URIError — a ferramenta envolve a chamada em try/catch e exibe a mensagem de erro em vez de retornar silenciosamente uma string vazia.

Exemplos

Codificando caracteres chineses (percent-encoding UTF-8)

Entrada: 你好世界 (4 caracteres CJK, 12 bytes UTF-8)
Saída:   %E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C

Cada byte UTF-8 (E4, BD, A0, ...) vira %XX
RFC: RFC 3986 seção 2.1 define o percent-encoding para URIs
Uso: parâmetros de query, segmentos de path, envio de dados de formulário

Codificando separadores de query string

Entrada: name=张三&age=20
Saída:   name%3D%E5%BC%A0%E4%B8%89%26age%3D20

%3D codifica '=' (delimitador entre chave e valor)
%26 codifica '&' (delimitador entre parâmetros)
RFC: RFC 3986 seção 3.4 define caracteres reservados do componente de query

Codificando uma URL completa (codificação parcial)

Entrada: https://example.com/search?q=你好&type=web
Saída:   https://example.com/search?q=%E4%BD%A0%E5%A5%BD&type=web

Nota: o esquema, o host e os separadores existentes NÃO são codificados
Apenas o valor de query não-ASCII recebe percent-encoding
RFC: RFC 3986 seção 3 define os componentes hierárquicos de URI

Codificando caracteres de espaço (duas convenções)

Segmento de path:  %20 (conforme RFC 3986)
Query string:      + (convenção histórica de formulários HTML)

Exemplo: /search for me -> /search%20for%20me
Exemplo: q=hello world -> q=hello+world

Ambos decodificam para o mesmo resultado; encodeURI usa %20, encodeURIComponent usa %20 para path e + para query em algumas implementações

Perguntas frequentes

O que a codificação de URL faz?

Substitui caracteres não seguros em URLs por sequências %: espaço → %20, & → %26, # → %23, etc. A RFC 3986 lista quais caracteres são seguros (alfanuméricos mais -, _, ., ~) e quais precisam de codificação. Navegadores, servidores e bibliotecas HTTP aplicam ou esperam codificação de URL nos limites certos.

Qual a diferença entre encodeURI e encodeURIComponent?

encodeURI mantém intactos os caracteres de sintaxe de URL (: / ? # & =) — ele espera uma URL inteira. encodeURIComponent codifica esses também — ele espera um valor de parâmetro. A página expõe os dois modos; escolha a codificação por componente para parâmetros de query e a codificação de URI para URLs inteiras.

Por que o espaço às vezes vira %20 e às vezes +?

%20 é o padrão URI. + é a convenção legada para o tipo MIME application/x-www-form-urlencoded usado em envios de formulários HTML. Eles parecem iguais para a maioria dos servidores, mas não são estritamente equivalentes — em URLs modernas use %20.

Devo codificar caracteres Unicode?

A RFC 3986 só permite ASCII; caracteres não-ASCII precisam ser codificados em UTF-8 e depois escapados com porcentagem (中 → %E4%B8%AD). Navegadores modernos exibem a forma Unicode na barra de endereço, mas enviam a forma codificada na rede. A página faz a etapa de codificação UTF-8 automaticamente.

Quais caracteres nunca devem ser codificados?

Caracteres não reservados pela RFC 3986: A-Z, a-z, 0-9, -, _, ., ~. Codificá-los é tecnicamente permitido, mas produz uma string de URL diferente; servidores podem tratar 'a' e '%61' como equivalentes ou como diferentes, dependendo das regras de canonicalização.

Por que minha URL decodificada tem caracteres estranhos?

Provavelmente foi codificada duas vezes: %2520 decodifica para %20 e depois para espaço — o que significa que alguém codificou a URL duas vezes. Decodifique duas vezes nesse caso. Alguns servidores codificam duplamente de forma automática; verifique o comportamento de codificação do seu cliente.

A codificação é feita localmente?

Sim. encodeURIComponent e decodeURIComponent rodam no seu navegador. As URLs não são enviadas.