Ответ 1
Я считаю, что вы ищете HttpServerUtility.UrlEncode.
System.Web.HttpUtility.UrlEncode(string url)
Я хочу сделать строку в URL с помощью С#, должно быть что-то в .NET Framework, которое должно помочь, правильно?.
Я считаю, что вы ищете 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
Мне тоже нужно было это сделать, нашел этот вопрос несколько лет назад, но название вопроса и текст не совсем совпадают, и с помощью Uri.EscapeDataString
или UrlEncode
(не используйте это, пожалуйста!) не обычно имеют смысл, если мы не говорим о передаче URL-адресов в качестве параметров для других URL-адресов.
(Например, передача URL-адреса обратного вызова при открытии аутентификации идентификатора, Azure AD и т.д.)
Надеюсь, что это более прагматичный ответ на вопрос: я хочу сделать строку в URL с помощью С#, должно быть что-то в .NET Framework, которое должно помочь, правильно?
Да - две функции полезны для создания строк URL в С#
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-код и т.д.
Как прокомментировали одобренную историю, метод 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"
Из документов:
String TestString = "This is a <Test String>.";
String EncodedString = Server.HtmlEncode(TestString);
Обновление: на самом деле это кодирует Html not Urls. Используйте UrlEncode (TestString), как и все, кто может читать лучше меня. Не удаляя это случайно, кто-то находит этот поток при поиске html-кодировки.