Как заменить все пробелы на% 20 в C #? - PullRequest
63 голосов
/ 05 октября 2009

Я хочу превратить строку в URL, используя C #. В .NET Framework должно быть что-то, что должно помочь, верно?

Ответы [ 10 ]

100 голосов
/ 05 октября 2009

Другой способ сделать это - использовать Uri.EscapeUriString(stringToEscape).

54 голосов
/ 05 октября 2009

Я считаю, что вы ищете HttpServerUtility.UrlEncode .

System.Web.HttpUtility.UrlEncode(string url)
46 голосов
/ 01 сентября 2010

Я нашел полезным System.Web.HttpUtility.UrlPathEncode(string str);

Заменяет пробелы на% 20, а не на +.

20 голосов
/ 07 апреля 2016

Чтобы правильно экранировать пробелы и другие специальные символы, используйте System.Uri.EscapeDataString(string stringToEscape).

10 голосов
/ 04 декабря 2017

Как прокомментировал утвержденный материал, метод HttpServerUtility.UrlEncode заменяет пробелы на + вместо% 20. Вместо этого используйте один из этих двух методов: Uri.EscapeUriString () или Uri.EscapeDataString ()

Пример кода:

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"
2 голосов
/ 05 октября 2009

Использование HttpServerUtility.UrlEncode

1 голос
/ 06 октября 2017

Мне тоже нужно было это сделать, я нашел этот вопрос несколько лет назад, но заголовок и текст вопроса не совсем совпадают, и использование Uri.EscapeDataString или UrlEncode (не используйте этот, пожалуйста!) обычно имеет смысл, если мы не говорим о передаче URL-адресов в качестве параметров другим URL-адресам.

(Например, передача URL-адреса обратного вызова при выполнении аутентификации с открытым идентификатором, Azure AD и т. Д.)

Надеюсь, что это более прагматичный ответ на вопрос: Я хочу превратить строку в URL с помощью C #, в платформе .NET должно быть что-то, что должно помочь, верно?

Да - две функции полезны для создания строк URL в C #

  • String.Format для форматирования URL
  • Uri.EscapeDataString для экранирования любых параметров в URL

Этот код

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

дает этот результат

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

Который можно безопасно скопировать и вставить в адресную строку браузера, или атрибут src тега HTML A, или использовать с curl, или закодировать в QR-код и т. Д.

0 голосов
/ 25 апреля 2018

Приведенный ниже код заменит повторяющийся пробел одним символом% 20.

Пример:

Ввод:

Code by Hitesh             Jain

Выход:

Code%20by%20Hitesh%20Jain

код

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();
}
0 голосов
/ 05 октября 2009
0 голосов
/ 05 октября 2009

HttpServerUtility.HtmlEncode

Из документации:

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

Но на самом деле это кодирует HTML, а не URL. Вместо этого используйте UrlEncode (TestString) .

...