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

je veux faire une chaîne de caractères dans une URL en utilisant C#. Il doit y avoir quelque chose dans le cadre .NET qui devrait aider, Non?

59
demandé sur Peter Mortensen 2009-10-05 02:37:23

10 réponses

je crois que vous cherchez HttpServerUtility.UrlEncode .

System.Web.HttpUtility.UrlEncode(string url)
56
répondu LiraNuna 2016-11-09 16:47:28

une autre façon de faire ceci est d'utiliser Uri.EscapeUriString(stringToEscape) .

95
répondu Dirk Vollmar 2009-10-04 23:27:53

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

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

44
répondu Gilda 2010-09-01 10:54:24

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

16
répondu palswim 2016-04-29 17:40:48

comme commenté sur l'histoire approuvée, le HttpServerUtility.UrlEncode méthode remplace les espaces avec + au lieu de %20. Utilisez l'une de ces deux méthodes à la place: Uri.EscapeUriString () or Uri.EscapeDataString ()

code échantillon:

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"
6
répondu Darrelk 2017-12-04 09:06:25
2
répondu Thomas Levesque 2009-10-04 22:40:59

j'avais besoin de faire cela aussi, j'ai trouvé cette question d'il y a des années mais le titre de la question et le texte ne correspondent pas tout à fait, et en utilisant Uri.EscapeDataString ou UrlEncode (ne pas utiliser celui-ci s'il vous plaît!) n'a généralement pas de sens à moins que nous parlions de passer des URLs comme paramètres à d'autres URLs.

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

en espérant que c'est une réponse plus pragmatique à la question: je veux faire une chaîne de caractères dans une 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 D'URL en C#

  • String.Format pour la mise en forme de l'URL
  • Uri.EscapeDataString pour échapper à tout paramètre 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 étiquette HTML A , ou utilisé avec curl , ou encodé dans un code QR, etc.

1
répondu nothingisnecessary 2017-10-05 23:28:59

le code ci-dessous remplacera l'espace de répétition par un seul caractère %20.

exemple:

Entrée:

Code by Hitesh             Jain

sortie:

Code%20by%20Hitesh%20Jain

Code

static void Main(string[] args)
{
    Console.WriteLine("Enter a string");
    string str = Console.ReadLine();
    string replacedStr = null;

    // This loop will repalce all repeat black space in single space
    for (int i = 0; i < str.Length - 1; i++)
    {
        if (!(Convert.ToString(str[i]) == " " &&
            Convert.ToString(str[i + 1]) == " "))
        {
            replacedStr = replacedStr + str[i];
        }
    }
    replacedStr = replacedStr + str[str.Length-1]; // Append last character
    replacedStr = replacedStr.Replace(" ", "%20");
    Console.WriteLine(replacedStr);
    Console.ReadLine();
}
-1
répondu Hitesh Jain 2018-04-29 11:04:01

HttpServerUtility.HtmlEncode

de la documentation:

String TestString = "This is a <Test String>.";
String EncodedString = Server.HtmlEncode(TestString);

mais cela code HTML, pas URLs. Utilisez plutôt UrlEncode (TestString) .

-2
répondu George Mauer 2018-04-21 05:23:20