Как заменить все пробелы на %20 в C#?
Я хочу сделать строку в URL-адрес с помощью C#. В .NET framework должно быть что-то, что должно помочь, верно?
10 ответов
Я считаю, что вы ищете HttpServerUtility.Функция urlencode.
System.Web.HttpUtility.UrlEncode(string url)
другой способ сделать это с помощью Uri.EscapeUriString(stringToEscape)
.
Я нашел полезным System.Web.HttpUtility.UrlPathEncode(string str);
Он заменяет пробелы на %20, а не +.
чтобы правильно избежать пробелов, а также остальных специальных символов, используйте System.Uri.EscapeDataString(string stringToEscape)
.
Как прокомментировал одобренную историю,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"
мне тоже нужно было это сделать, нашел этот вопрос много лет назад, но название вопроса и текст не совсем совпадают, и с помощью Uri.EscapeDataString
или UrlEncode
(Не говори, пожалуйста!) обычно не имеет смысла, если мы не говорим о передаче URL-адресов в качестве параметров другим URL-адресам.
(например, передача URL-адреса обратного вызова при выполнении проверки подлинности open ID, Azure AD и т. д.)
надеюсь, что это более прагматичный ответ на вопрос: я хочу сделать строку в a URL используя C#, в .NET framework должно быть что-то, что должно помочь, верно?
да - две функции полезны для создания строк 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-код, и т. д.
приведенный ниже код заменит повторяющееся пространство одним символом %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();
}
HttpServerUtility.Функция htmlencode
из документации:
String TestString = "This is a <Test String>.";
String EncodedString = Server.HtmlEncode(TestString);
но это фактически кодирует HTML, а не url. Вместо этого используйте UrlEncode (TestString).