158 votes

Comment encoder le symbole plus (+) dans une URL

Le lien URL ci-dessous ouvrira une nouvelle fenêtre de Google mail. Le problème que je rencontre est que Google remplace tous les signes plus (+) dans le corps de l'e-mail par des espaces vides. Il semble que cela ne se produise qu'avec les + signe. Comment puis-je y remédier ? (Je travaille sur une page web ASP.NET).

https://mail.google.com/mail?view=cm&tf=0&to=someemail@somedomain.com&su=some subject&body=Bonjour là+Bonjour là

(Dans le corps du message, "Bonjour+Bonjour" s'affichera sous la forme "BonjourBonjour").

234voto

Darin Dimitrov Points 528142

Les + a une signification particulière dans [le segment de requête] d'une URL => il s'agit d'un espace blanc : . Si vous voulez utiliser le littéral + vous devez l'encoder dans l'URL pour qu'il devienne %2b :

body=Hi+there%2bHello+there

Voici un exemple de la manière dont vous pouvez générer correctement des URL en .NET :

var uriBuilder = new UriBuilder("https://mail.google.com/mail");

var values = HttpUtility.ParseQueryString(string.Empty);
values["view"] = "cm";
values["tf"] = "0";
values["to"] = "someemail@somedomain.com";
values["su"] = "some subject";
values["body"] = "Hi there+Hello there";

uriBuilder.Query = values.ToString();

Console.WriteLine(uriBuilder.ToString());

Le résultat :

https://mail.google.com:443/mail?view=cm&tf=0&to=someemail%40somedomain.com&su=some+subject&body=Hi+there%2bHello+there

32voto

Black Frog Points 6902

Si vous voulez un plus + dans le corps, vous devez l'encoder en tant que 2B .

Par exemple : Essayez ceci

11voto

morteza khadem Points 311

Pour coder un + à l'aide de JavaScript, vous pouvez utiliser la fonction encodeURIComponent fonction.

Exemple :

var url = "+11";
var encoded_url = encodeURIComponent(url);
console.log(encoded_url)

5voto

SchlaWiener Points 9682

Juste pour ajouter ceci à la liste :

Uri.EscapeUriString("Hi there+Hello there") // Hi%20there+Hello%20there
Uri.EscapeDataString("Hi there+Hello there") // Hi%20there%2BHello%20there

Voir https://stackoverflow.com/a/34189188/98491

En général, vous voulez utiliser EscapeDataString qui le fait bien.

4voto

Maxim Masiutin Points 1454

Il est plus sûr de toujours coder en pourcentage tous les caractères à l'exception de ceux définis comme "non réservés" dans la RFC-3986.

unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"

Il faut donc coder en pourcentage le caractère plus et les autres caractères spéciaux.

Le problème que vous rencontrez avec les plus est dû au fait que, selon la RFC-1866 (spécification HTML 2.0), paragraphe 8.2.1. alinéa 1, "Les noms et valeurs des champs de formulaire sont échappés : les caractères d'espacement sont remplacés par `+', puis les caractères réservés sont échappés"). Cette façon d'encoder les données de formulaire est également donnée dans les spécifications HTML ultérieures, voir les paragraphes pertinents sur application/x-www-form-urlencoded.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X