Как заменить все пробелы на% 20 в C #?

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


person Haim Bender    schedule 04.10.2009    source источник
comment
Заголовок этого вопроса не соответствует этому вопросу. Чтобы заменить все пробелы на% 20 (заголовок) в C #, вы можете использовать String.Replace(" ", "%20"). Если вы создаете URL-адрес, все, что вам нужно сделать, это поместить значение URL-адреса в строку: string url = "https://site/app/?q=cats" Но если OP говорил о передаче URL-адреса в качестве параметра GET как части другого URL-адреса, который является чем-то совершенно другим, что само по себе отличается от, скажем, отправка URL-адреса в тег привязки HTML в ASP.NET (или что-то еще).   -  person nothingisnecessary    schedule 06.10.2017


Ответы (10)


Я полагаю, вы ищете HttpServerUtility.UrlEncode.

System.Web.HttpUtility.UrlEncode(string url)
person LiraNuna    schedule 04.10.2009
comment
Я думаю, что Uri.EscapeUriString ( ) - подходящий метод, если нам нужно относиться к нему религиозно :) - person Stoyan Dimov; 09.11.2015
comment
@StoyanDimov: EscapeUriString() не убегает ни &, ни =, ни ?, поэтому, похоже, именно EscapeDataString(). - person Doug S; 11.11.2015
comment
Кто-то отредактировал этот вопрос, чтобы полностью изменить ответ. Мы не должны использовать редактирование для изменения смысла конкретного сообщения. - person palswim; 16.09.2016
comment
@palswim Да, но принятый ответ не может быть тем, к которому вы вернулись: System.Web.HttpUtility.UrlEncode кодирует пробел как +, а не %20, поэтому этот ответ полностью неверен. - person Eregrith; 09.11.2016
comment
@palswim Я отменил откат: принятый ответ был действительно неправильным. Иди разберись. - person Eregrith; 09.11.2016
comment
Моя добавляет + вместо% 20 ... есть идеи, почему? - person Si8; 04.04.2017
comment
Неверный ответ - не используйте UrlEncode, потому что он заменяет пробелы на + (вместо %20, который специально запрашивал OP), что не является стандартной схемой URI. decodeURI и decodeURIComponent в JavaScript не декодируют это должным образом. Используйте Uri.EscapeDataString, который может быть правильно декодирован с помощью JavaScript, для хорошего двустороннего использования закодированных данных и URI. - person nothingisnecessary; 06.10.2017
comment
which is not a standard URI scheme ‹на самом деле это так: w3.org/TR/ html401 / interact / forms.html # h-17.13.4.1 - person CherryDT; 22.06.2020

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

person Dirk Vollmar    schedule 04.10.2009
comment
К сожалению, этот метод не экранирует & символов. - person Christian Davén; 10.12.2014
comment
Он также не экранирует ни =, ни ?. Похоже, Uri.EscapeDataString() - это правильный путь. - person Doug S; 11.11.2015
comment
Это тоже не убегает # - person Mykhailo Seniutovych; 07.08.2020

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

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

person Gilda    schedule 01.09.2010
comment
Есть, по крайней мере, в 4.0. System.Web.HttpUtility.UrlDecode (a% 20b) возвращает a b - person Abacus; 08.05.2013
comment
Он работает, но не используйте его, так как он предназначен для браузеров. Вместо этого используйте Uri.EscapeUriString (STRING). MSDN: не использовать; предназначен только для совместимости с браузером. Используйте UrlEncode. msdn.microsoft.com/en-us/library/ - person VRC; 21.08.2013
comment
Мне это показалось полезным, потому что я просто хотел закодировать часть URL-адреса, но по-прежнему оставался интерактивным. Они сделали больше, чем хотелось: System.Uri.EscapeDataString (url) и HttpContext.Current.Server.UrlEncode (url) - person sobelito; 05.07.2016
comment
Мне нужно было закодировать пробелы в% 20, а не в +, чтобы успешно публиковать сообщения в Twitter. UrlEncode (url) превращает пробелы в + и поэтому не был правильным ответом на мою проблему. - person jgerman; 01.12.2016

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

person palswim    schedule 06.04.2016
comment
Если комментарий фактический ответ, кто-то должен дать ответ на вопрос. - person palswim; 07.04.2016
comment
да, этот обрабатывает пробелы, # и%, но кодирует / в% 2f - person kite; 22.03.2017

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

Образец кода:

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

Uri.EscapeUriString("https://mywebsite.com/api/get me this file.jpg");
//Output: "https://mywebsite.com/api/get%20me%20this%20file.jpg"
Uri.EscapeDataString("https://mywebsite.com/api/get me this file.jpg");
//Output: "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");
//Output: "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");    
//Output: "https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%3Fid%3D123%26name%3Dget%20me%20this%20file.jpg"
person Darrel K.    schedule 04.12.2017

Используйте HttpServerUtility.UrlEncode.

person Thomas Levesque    schedule 04.10.2009

Мне тоже нужно было это сделать, я нашел этот вопрос много лет назад, но заголовок вопроса и текст не совсем совпадают, и использование 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-код и т. Д.

person nothingisnecessary    schedule 05.10.2017
comment
И эквивалент в JavaScript будет чем-то вроде "https://site/app/?q=" + encodeURIComponent("search for cats") + "&redirectUrl=" + encodeURIComponent("https://mysite/myapp/?state=from idp"), который дает тот же результат. - person nothingisnecessary; 06.10.2017


В приведенном ниже коде повторяющийся пробел заменяется одним символом% 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();
}
person Hitesh Jain    schedule 25.04.2018

HttpServerUtility.HtmlEncode

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

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

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

person George Mauer    schedule 04.10.2009
comment
OP спрашивает о кодировке URL; не кодировка HTML. - person Metro Smurf; 05.10.2009
comment
Нет, это для кодировки HTML, а не для кодировки URL (как следует из названия ...) - person Thomas Levesque; 05.10.2009
comment
Да, вы правы, используйте UrlEncode () для кодирования URL-адресов - это только для кодирования Html Entities - person George Mauer; 06.10.2009