Я хочу превратить строку в URL-адрес с помощью C #. В .NET framework должно быть что-то, что должно помочь, верно?
Как заменить все пробелы на% 20 в C #?
Ответы (10)
Я полагаю, вы ищете HttpServerUtility.UrlEncode.
System.Web.HttpUtility.UrlEncode(string url)
EscapeUriString()
не убегает ни &
, ни =
, ни ?
, поэтому, похоже, именно EscapeDataString()
.
- person Doug S; 11.11.2015
System.Web.HttpUtility.UrlEncode
кодирует пробел как +
, а не %20
, поэтому этот ответ полностью неверен.
- person Eregrith; 09.11.2016
+
вместо% 20 ... есть идеи, почему?
- person Si8; 04.04.2017
UrlEncode
, потому что он заменяет пробелы на +
(вместо %20
, который специально запрашивал OP), что не является стандартной схемой URI. decodeURI
и decodeURIComponent
в JavaScript не декодируют это должным образом. Используйте Uri.EscapeDataString
, который может быть правильно декодирован с помощью JavaScript, для хорошего двустороннего использования закодированных данных и URI.
- person nothingisnecessary; 06.10.2017
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 Christian Davén; 10.12.2014
=
, ни ?
. Похоже, Uri.EscapeDataString()
- это правильный путь.
- person Doug S; 11.11.2015
#
- person Mykhailo Seniutovych; 07.08.2020
Я нашел полезным 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")
//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"
Мне тоже нужно было это сделать, я нашел этот вопрос много лет назад, но заголовок вопроса и текст не совсем совпадают, и использование Uri.EscapeDataString
или UrlEncode
(не используйте его, пожалуйста!) Обычно не имеет смысла, если мы не говорим о передаче URL-адресов в качестве параметров другим URL-адресам.
(Например, передача URL-адреса обратного вызова при проверке подлинности с открытым идентификатором, Azure AD и т. Д.)
Надеясь, что это более прагматичный ответ на вопрос: Я хочу превратить строку в URL-адрес с помощью C #, в платформе .NET должно быть что-то, что должно помочь, верно?
Да - для создания строк URL на C # полезны две функции.
String.Format
для форматирования URLUri.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-код и т. Д.
"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();
}
Из документации:
String TestString = "This is a <Test String>.";
String EncodedString = Server.HtmlEncode(TestString);
Но на самом деле это кодирует HTML, а не URL-адреса. Вместо этого используйте UrlEncode (TestString).
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