O sinal de mais nem sempre é um espaço

A ferramenta URL do Moyoutil converte componentes URI. Usa decodeURIComponent para descodificar, mantendo +. URLSearchParams aplica as regras de application/x-www-form-urlencoded: substitui + na cadeia original por um espaço antes de descodificar os escapes percentuais. Por essa ordem, um sinal de mais representado por %2B permanece +.

URL WHATWG: análise de estilo de formulário

ECMAScript: decodeURIComponent

Resultado da execução da mesma entrada em dois caminhos

Este é o resultado da execução da função urlComponent do projeto e do JavaScript URLSearchParams em 5 de outubro de 2026. As aspas na tabela são marcas JSON que tornam os espaços visíveis, e não caracteres incluídos no resultado. Na análise de consulta, prefixamos cada entrada com q=.

Decodificação de componentes comparada à análise de valor de consulta
EntradaDescodificação do MoyoutilURLSearchParams
C++"C++""C "
C%2B%2B"C++""C++"
a+b"a+b""a b"
a%20b"a b""a b"
Duas vias de descodificação para C++ e C%2B%2B. Ao analisar q=C++ como consulta, ficam dois espaços depois de C.
Diagrama original de saídas reproduzidas com código. 0x20 é o código de um espaço e 0x2B o de um sinal de mais. Não é uma captura de ecrã.

Para preservar os termos de pesquisa, crie consultas com valores originais

Este exemplo apenas cria cadeias de texto; não envia pedidos a um servidor. Ao passar o valor original C++ guide a URLSearchParams, os sinais de mais tornam-se %2B e o espaço torna-se +. encodeURIComponent converte esse espaço em %20. Neste exemplo, ambos os resultados recuperam o valor original ao serem analisados como consulta.

const original = "C++ guide";
const query = new URLSearchParams({ q: original }).toString();
// q=C%2B%2B+guide
const component = encodeURIComponent(original);
// C%2B%2B%20guide
new URLSearchParams(query).get("q");
// C++ guide

URL WHATWG: serializar URLSearchParams

A ferramenta URL do Moyoutil não tem campos para montar nomes e valores de consulta nem um modo de descodificação de formulários. Para verificar um valor, codifique C++ guide, descodifique o resultado e compare-o com o original. Não introduza um URL completo no campo de conversão de valores. Verifique as regras exigidas pela API real.

Se você inserir um valor já codificado, o sinal de porcentagem também será convertido.

Passe os valores originais não codificados ao formato de objeto de URLSearchParams. Se passar um valor já codificado com encodeURIComponent, % será novamente codificado como %25. Analisar a consulta abaixo uma vez devolve C%2B%2B, não C++. Verifique as etapas de envio e receção antes de tentar descodificar repetidamente.

const encoded = encodeURIComponent("C++");
// C%2B%2B
const query = new URLSearchParams({ q: encoded }).toString();
// q=C%252B%252B
new URLSearchParams(query).get("q");
// C%2B%2B

Ordem de verificação de links problemáticos

  1. Mantém juntos o termo de pesquisa original e a string de consulta passada. Distinguir entre C++ e C%2B%2B.
  2. Verifique se o código de recebimento é decodeURIComponent ou um analisador de consulta baseado em formulário. Os resultados da decodificação do Moyoutil por si só não determinam os resultados do servidor.
  3. Reconstrua a consulta com os valores originais e compare-os com os resultados da análise. Distinguir entre código de exemplo e regras de API reais.

Notação percentual incompleta, como % ou %2, é um erro no Moyoutil. %FF também é um erro porque não é um texto UTF-8 válido. Esta verificação não significa que o tratamento de erros de outros analisadores seja o mesmo, nem é uma função para recuperar automaticamente o texto original.

Perguntas frequentes

Devo usar%20 ou +?

Ao codificar um valor com Moyoutil, um espaço torna-se %20. A serialização de URLSearchParams usa +. Verifique as regras do destinatário e se a conversão de ida e volta devolve o valor original.

Posso substituir todos os sinais de mais originais por espaços?

Não. Isso altera o significado de valores como C++. Aplique as regras de análise de formulários apenas a cadeias recebidas nesse formato; não altere arbitrariamente o texto original não codificado.