Un signe plus ne signifie pas toujours une espace

L’outil URL de Moyoutil convertit des composants URI. Le décodage utilise decodeURIComponent, qui conserve +. URLSearchParams applique les règles de application/x-www-form-urlencoded : il remplace + dans la chaîne originale par une espace avant de décoder les séquences avec %. Cet ordre permet au signe plus encodé en %2B de rester +.

URL WHATWG : analyse de style formulaire

ECMAScript: decodeURIComponent

Résultat de l'exécution de la même entrée dans deux chemins

Ceci est le résultat de l'exécution de la fonction urlComponent et de JavaScript URLSearchParams du projet le 5 octobre 2026. Les guillemets dans le tableau sont des marques JSON qui rendent les espaces visibles, et non les caractères inclus dans le résultat. Dans l'analyse des requêtes, nous préfixons chaque entrée avec q=.

Décodage des composants par rapport à l'analyse de la valeur de la requête
EntréeDécodage MoyoutilURLSearchParams
C++"C++""C "
C%2B%2B"C++""C++"
a+b"a+b""a b"
a%20b"a b""a b"
Deux chemins de décodage pour C++ et C%2B%2B. L’analyse de q=C++ comme requête laisse deux espaces après C.
Schéma original de résultats reproduits par du code. 0x20 est le code de caractère d’une espace et 0x2B celui du signe plus. Ce n’est pas une capture d’écran.

Pour conserver les termes de recherche, créez des requêtes avec des valeurs d'origine

Cet exemple crée seulement des chaînes et n’envoie aucune requête à un serveur. En passant la valeur originale C++ guide à URLSearchParams, les signes plus sont sérialisés en %2B et l’espace en +. encodeURIComponent utilise %20 pour cette espace. Dans cet exemple, les deux résultats restituent la valeur originale lorsqu’ils sont analysés comme requête.

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 : sérialiser URLSearchParams

L’outil URL de Moyoutil n’a ni champs pour assembler les noms et valeurs de requête ni mode de décodage de formulaire. Pour vérifier une valeur, encodez C++ guide, décodez le résultat et comparez-le à l’original. Ne saisissez pas une URL complète dans le champ de conversion des valeurs. Vérifiez les règles de l’API utilisée.

Si vous saisissez une valeur déjà codée, le signe de pourcentage sera également converti.

Passez les valeurs originales non encodées à la forme objet de URLSearchParams. Si vous passez une valeur déjà encodée avec encodeURIComponent, % est réencodé en %25. Une seule analyse de la requête ci-dessous renvoie C%2B%2B, et non C++. Vérifiez les étapes d’envoi et de réception avant de tenter des décodages répétés.

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

Ordre de vérification des liens problématiques

  1. Conserve ensemble le terme de recherche d'origine et la chaîne de requête transmise. Faites la distinction entre C++ et C%2B%2B.
  2. Vérifiez si le code de réception est decodeURIComponent ou un analyseur de requête basé sur un formulaire. Les résultats de décodage de Moyoutil ne déterminent pas à eux seuls les résultats du serveur.
  3. Reconstruisez la requête avec les valeurs d'origine et comparez-les avec les résultats de l'analyse. Faites la distinction entre l'exemple de code et les règles API réelles.

Une notation de pourcentage incomplète, telle que % ou %2, est une erreur dans Moyoutil. %FF est également une erreur car il ne s'agit pas d'un texte UTF-8 valide. Cette vérification ne signifie pas que la gestion des erreurs des autres analyseurs est la même, ni qu'il s'agit d'une fonction permettant de récupérer automatiquement le texte original.

Questions fréquemment posées

Dois-je utiliser %20 ou + ?

Lorsque Moyoutil encode une valeur, une espace devient %20. La sérialisation de URLSearchParams utilise +. Vérifiez les règles du destinataire et que l’aller-retour restitue la valeur originale.

Puis-je remplacer tous les signes plus d'origine par des espaces ?

Non. Cela change le sens de valeurs comme C++. Appliquez les règles d’analyse de formulaire uniquement aux chaînes reçues dans ce format ; ne modifiez pas arbitrairement le texte original non encodé.