web-dev-qa-db-fra.com

Comment remplacer tous les espaces par% 20 en C #?

Je veux transformer une chaîne en URL en utilisant C #. Il doit y avoir quelque chose dans le framework .NET qui devrait aider, non?

64
Haim Bender

Je crois que vous recherchez HttpServerUtility.UrlEncode .

System.Web.HttpUtility.UrlEncode(string url)
56
LiraNuna

Une autre façon de procéder consiste à utiliser Uri.EscapeUriString(stringToEscape) .

102
Dirk Vollmar

J'ai trouvé utile System.Web.HttpUtility.UrlPathEncode(string str);

Il remplace les espaces par% 20 et non par +.

46
Gilda

Pour échapper correctement les espaces ainsi que le reste des caractères spéciaux, utilisez System.Uri.EscapeDataString(string stringToEscape) .

20
palswim

Comme commenté sur l'histoire approuvée, la méthode HttpServerUtility.UrlEncode remplace les espaces par + au lieu de% 20. Utilisez plutôt l'une de ces deux méthodes: ri.EscapeUriString () ou ri.EscapeDataString ()

Exemple de code:

HttpUtility.UrlEncode("https://mywebsite.com/api/get me this file.jpg")
//"https%3a%2f%2fmywebsite.com%2fapi%2fget+me+this+file.jpg"

Uri.EscapeUriString("https://mywebsite.com/api/get me this file.jpg");
//"https://mywebsite.com/api/get%20me%20this%20file.jpg"
Uri.EscapeDataString("https://mywebsite.com/api/get me this file.jpg");
//"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%20me%20this%20file.jpg"

//When your url has a query string:
Uri.EscapeUriString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg");
//"https://mywebsite.com/api/get?id=123&name=get%20me%20this%20file.jpg"
Uri.EscapeDataString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg");

//"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%3Fid%3D123%26name%3Dget%20me%20this%20file.jpg"
10
Darrelk
2
Thomas Levesque

J'avais besoin de faire cela aussi, j'ai trouvé cette question il y a des années mais le titre et le texte de la question ne correspondent pas tout à fait, et en utilisant Uri.EscapeDataString ou UrlEncode (ne l'utilisez pas s'il vous plaît!) n'a généralement de sens que si nous parlons de passer des URL en tant que paramètres à d'autres URL.

(Par exemple, passer une URL de rappel lors de l'authentification par ID ouvert, Azure AD, etc.)

En espérant que ce soit une réponse plus pragmatique à la question: Je veux transformer une chaîne en URL en utilisant C #, il doit y avoir quelque chose dans le framework .NET qui devrait aider, non?

Oui - deux fonctions sont utiles pour créer des chaînes URL en C #

  • String.Format pour formater l'URL
  • Uri.EscapeDataString pour échapper tous les paramètres de l'URL

Ce code

String.Format("https://site/app/?q={0}&redirectUrl={1}", 
  Uri.EscapeDataString("search for cats"), 
  Uri.EscapeDataString("https://mysite/myapp/?state=from idp"))

produit ce résultat

https://site/app/?q=search%20for%20cats&redirectUrl=https%3A%2F%2Fmysite%2Fmyapp

Qui peut être copié et collé en toute sécurité dans la barre d'adresse d'un navigateur, ou l'attribut src d'une balise HTML A, ou utilisé avec curl, ou encodé dans un code QR, etc.

1
0
Jacob