Blog do ClockTools

Ferramentas de URL

Codificação de URL para espaços: %20 ou Plus?

Um espaço de URL torna-se %20 em um componente URI e + somente na serialização de estilo de formulário.

Por , desenvolvedor e editor | | Revisado sob o ClockTools política editorial

Codificação de URL para espaços apresentados na ilustração de ClockTools
Índice

Um espaço nos dados de URL geralmente se torna %20, mas a serialização de consulta no estilo de formulário representa isso como +. Ambos podem estar corretos. A saída correta depende do destino: use a codificação percentual para um componente URI individual e use a convenção de adição somente quando o fluxo de trabalho de recebimento esperar aplicativo/x-www-form-urlencoded dados.

O ClockTools Codificador de URL torna esse contexto explícito com perfis de componente URI, URL completo e dados de formulário. Colar chá verde, alterne os perfis e compare a saída antes de alterar o código do aplicativo.

Comece com o destino

Não pergunte “Qual símbolo sempre significa espaço?” Pergunte qual analisador receberá o valor.

Para um segmento de caminho, valor de fragmento ou valor de consulta individual, a codificação percentual é a representação confiável. O byte UTF-8 do caractere de espaço é hexadecimal 20, então seu trio codificado em porcentagem é %20.

Para dados de estilo de formulário HTML, a convenção de serialização usa + para espaços e codificação percentual um sinal de mais literal como %2 bilhões. O Padrão de URL WHATWG define esse comportamento codificado por URL do formulário separadamente da análise geral de URL.

O Sintaxe de URI RFC 3986 define um octeto codificado em porcentagem como % seguido por dois dígitos hexadecimais. Também distingue delimitadores reservados de caracteres de dados não reservados. Essa distinção é a razão pela qual a codificação de um valor é diferente da codificação de um endereço inteiro.

Diagrama de decisão roteando um espaço para percent-20 para componentes URI ou plus para serialização em estilo de formulário
Diagrama de decisão roteando um espaço para percent-20 para componentes URI ou plus para serialização em estilo de formulário

A tabela de decisão %20 versus plus

DestinoRepresentação espacialExemplo para chá verdePor que
Segmento de caminho%20/tópicos/verde%20cháEspaço são dados dentro de um segmento de caminho
Valor de consulta codificado como um componente%20?q=verde%20cháA codificação do componente mantém o valor separado dos delimitadores
Consulta codificada em formulário ou corpo da solicitação+q=verde+cháO serializador de formulário mapeia o espaço para mais
Exibição de URL completa%20 onde um espaço literal deve ser serializadohttps://example.com/green%20tea?q=hot%20cupEstrutural :, /, ?, =e & permanecem delimitadores
Literal mais dentro dos dados do formulário%2 bilhõesq=C%2B%2BUm sinal de mais seria decodificado como um espaço nesse perfil

A última linha evita um bug comum. Se o valor pretendido for C++, enviando C++ através de um decodificador de formulário pode produzir C . Codifique cada literal mais como %2 bilhões antes da análise do formulário.

Quatro testes ClockTools reproduzíveis

Executamos quatro pequenas entradas na implementação atual da ferramenta. Seu perfil de componente URI usa JavaScript codificarURIComponent. Form Data aplica a mesma codificação de componente e depois substitui %20 com +. Usos de URL completo codificarURI, que preserva a estrutura do URL.

EntradaPerfilSaída observadaInterpretação
chá verdeComponente URIverde%20cháUm componente, espaço codificado por porcentagem
chá verdeDados do formulárioverde+cháConvenção de espaço de estilo de forma
C++Dados do formulárioC%2B%2BSinais de mais literais são protegidos
https://example.com/a b?q=x yURL completohttps://example.com/a%20b?q=x%20yOs delimitadores de URL permanecem estruturais

Estes são resultados de transformação determinística, não evidências de classificação de pesquisa. Você pode reproduzi-los localmente no navegador. A página atualiza a saída imediatamente, relata percentuais de escape e contagens de bytes e não precisa enviar a entrada a um servidor para conversão.

Use o Decodificador de URL para executar a verificação inversa. Decodificar verde%20chá sob o perfil do componente e verde+chá em Dados do formulário. O decodificador avisa quando um sinal de mais aparece em um perfil sem formulário porque o significado pretendido é ambíguo.

O que a codificação de componentes protege?

Um URL usa pontuação como gramática. Em uma string de consulta, & pode começar outro parâmetro e = separa um nome de um valor. # começa um fragmento. ? inicia uma consulta. Se um desses caracteres pertencer aos dados do usuário, deixá-lo bruto pode alterar a estrutura.

Considere o valor temporizador e alarme. A codificação de componentes produz temporizador%20%26%20alarme. O e comercial se torna %26, então um analisador recebe um valor em vez de interpretar alarme como um novo parâmetro.

Codificação é representação, não validação ou criptografia. Um redirecionamento codificado por porcentagem ainda pode apontar para um host não aprovado após a decodificação. Um script codificado ainda é uma entrada não confiável. Valide esquemas permitidos, hosts, nomes de parâmetros e regras de negócios após a análise. Evite colocar senhas, tokens ou outros segredos em URLs porque os endereços podem aparecer no histórico, logs, análises, capturas de tela e dados de referência.

Quando você precisa comparar uma string de consulta antes e depois, o Verificador de comparação de texto torna cada escape alterado visível. Isso é mais confiável do que verificar um URL de retorno de chamada longo em busca de um URL ausente %25.

Por que a codificação dupla cria %2520?

A codificação dupla acontece quando o texto já codificado é tratado como dados brutos e codificado novamente.

Comece com um espaço:

```texto

espaço -> %20

```

Codificar %20 como um novo componente. O sinal de porcentagem torna-se %25, enquanto os dígitos permanecem literais:

```texto

%20 -> %2520

```

Uma decodificação muda %2520 de volta para %20. Uma segunda decodificação muda %20 para um espaço. Se seu aplicativo espera uma passagem de decodificação, mas recebe um valor com codificação dupla, o usuário poderá ver %20 em vez de um espaço em branco.

A solução é não decodificar repetidamente até que o texto pareça correto. A decodificação repetida pode alterar delimitadores codificados deliberadamente e criar problemas de segurança. Identifique o limite de propriedade: exatamente uma camada deve codificar o componente e exatamente uma camada correspondente deve decodificá-lo.

Um caminho de depuração de incompatibilidade de espaço

Use este caminho quando um sistema enviar %20 e outro exibe +, %2520ou um espaço literal em branco.

1. Capture o valor bruto antes que qualquer analisador de estrutura o altere.

2. Identifique se o campo é um segmento de caminho, um componente de consulta, uma URL completa ou um corpo de formulário.

3. Registre o valor decodificado esperado, incluindo sinais de adição literais.

4. Reproduza a mesma entrada no perfil ClockTools correspondente.

5. Decodifique uma vez com o perfil de recebimento.

6. Compare o resultado com o valor esperado.

7. Procure no fluxo do aplicativo um segundo codificador ou decodificador se %25 aparece inesperadamente.

SintomaPrimeira verificaçãoCausa provável
verde+chá permanece com um plusPerfil do decodificadorO decodificador de componentes não mapeia mais para o espaço
C++ torna-se C Codificação do remetenteSinais de adição literais não foram codificados como %2 bilhões
%20 é visível para o usuárioContagem de decodificaçãoOs dados codificados nunca foram decodificados ou foram codificados duas vezes anteriormente
%2520 aparece em uma solicitaçãoContagem de codificaçãoSinal de porcentagem de %20 foi codificado novamente
A consulta é dividida após um E comercialLimite do componenteUm e comercial de dados foi deixado bruto

Este caminho de depuração é intencionalmente estreito. Ele separa o contexto dos dados das suposições e cada etapa tem uma entrada e uma saída visíveis.

Quando você deve codificar um URL completo?

Use o perfil URL completo somente quando desejar que o endereço continue sendo um endereço. Ele preserva a pontuação estrutural, como o esquema de dois pontos, barras, ponto de interrogação, sinal de igual, e comercial e marcador de fragmento, enquanto codifica caracteres como espaços.

Use o componente URI quando um URL completo estiver aninhado dentro de outro parâmetro. Por exemplo, um endereço de retorno de chamada colocado em redirecionar = são dados da perspectiva do URL externo. Codificar o endereço aninhado como um componente evita sua ? e & de ingressar na consulta externa.

Não passe repetidamente um endereço por perfis diferentes esperando uma string universalmente segura. Escreva o limite explicitamente:

```texto

estrutura de URL externa + encodeURIComponent (URL de retorno de chamada interno)

```

O aplicativo receptor deve analisar o URL externo, extrair o componente de retorno de chamada, decodificá-lo uma vez, analisar o URL interno resultante e validar o destino. A codificação mantém a sintaxe intacta; a validação decide se o destino é permitido.

Perguntas frequentes

Um espaço de URL deve ser %20 ou um sinal de mais?

Use %20 para um espaço dentro de um componente URI geral. Use + quando o fluxo de trabalho de recebimento espera explicitamente a serialização application/x-www-form-urlencoded.

Por que um sinal de mais é decodificado como um espaço?

Os analisadores de estilo de formulário mapeiam + para um espaço como parte da convenção codificada pelo URL do formulário. Um decodificador de componente geral não precisa aplicar essa substituição.

Como codifico um sinal de adição literal nos dados do formulário?

Codifique o sinal de mais como% 2B. Caso contrário, um decodificador de formulário pode interpretar o sinal de mais como um espaço.

O que significa %2520?

%2520 geralmente indica codificação dupla. O sinal de porcentagem em um escape %20 existente tornou-se %25, portanto, uma decodificação retorna %20 e uma segunda decodificação retorna um espaço.

Devo codificar um URL inteiro com encodeURIComponent?

Não quando seu esquema, barras, delimitadores de consulta e marcador de fragmento devem permanecer estruturais. Use codificação de componente quando todo o URL estiver aninhado como dados dentro de outro valor.

A codificação de URL torna segura a entrada não confiável?

Não. A codificação preserva os limites da sintaxe, mas o receptor ainda deve validar esquemas, hosts, redirecionamentos, valores de parâmetros, permissões e outras regras de negócios após a análise.

Sobre o autor

Vigneshwaran Vijayakumar

Fundador, desenvolvedor e editor de ClockTools | Gerente de Marketing Digital | Índia

Vigneshwaran é um engenheiro com décadas de experiência técnica, incluindo trabalho profissional como Gerente de Marketing Digital em Dubai. Seu trabalho conecta análise de dados, otimização de mecanismos de pesquisa, otimização de taxa de conversão, sistemas de conteúdo, produção visual e IA aplicada e aprendizado de máquina. Em ClockTools, ele transforma essa experiência multidisciplinar em utilitários de navegador focados e guias práticos com reconhecimento de fonte.

Perfil do LinkedIn