2009-10-04 4 views
53

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

+0

Этот вопрос название не соответствует вопрос. Чтобы заменить все пробелы на% 20 (заголовок) на C#, вы можете использовать 'String.Replace (" ","% 20 ")'. Если вы создаете URL-адрес, все, что вам нужно сделать, это поместить значение URL в строку: 'string url =" https: // site/app /? Q = cats "' Но если OP говорил о передаче URL как GET как часть другого URL-адреса, который полностью является чем-то другим, что само по себе отличается от, скажем, испускания URL-адреса в тег привязки HTML в ASP.NET (или что-то еще). – nothingisnecessary

ответ

51

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

System.Web.HttpUtility.UrlEncode(string url) 
+2

Я думаю, что [Uri.EscapeUriString()] (https://msdn.microsoft.com/en-us/library/system.uri.escapeuristring%28v=vs.110%29.aspx) является подходящим методом, если у нас есть быть религиозным в этом :) –

+10

@StoyanDimov: 'EscapeUriString()' не убегает 'и' ни '=' ни '?', поэтому 'EscapeDataString()' похоже, тот, который будет использоваться. –

+3

Кто-то отредактировал этот вопрос, чтобы полностью изменить ответ. Мы [не должны использовать редактирование для изменения значения] (http://stackoverflow.com/help/editing) определенного сообщения. – palswim

-2

HttpServerUtility.HtmlEncode

Из документов:

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

Обновление: Это на самом деле кодирует HTML не Urls. Используйте UrlEncode (TestString), поскольку все, кто может читать лучше меня, сказали. Не удаляя это случайно, кто-то находит этот поток при поиске html-кодировки.

+3

OP спрашивает о кодировке URL; а не кодирование HTML. –

+0

Нет, это для кодирования HTML, а не для кодировки URL (как следует из названия ...) –

+0

Yup, вы правы, используйте UrlEncode() для кодирования URL-адресов - это только для кодирования только для Html Entities –

89

Другой способ сделать это с помощью Uri.EscapeUriString(stringToEscape).

+4

К сожалению, этот метод doesn 't escape '&' characters. –

+15

Он также не скрывает '=', ни '?'. Кажется, что 'Uri.EscapeDataString()' это путь. –

40

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

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

+0

Кажется, что нет метода UrlPathDecode? – syclee

+0

Существует, по крайней мере, в 4.0. System.Web.HttpUtility.UrlDecode («a% 20b») дает «a b» – Abacus

+2

Он работает, но не использует его, поскольку он предназначен для браузеров. Вместо этого используйте Uri.EscapeUriString (STRING). MSDN: «Не использовать, предназначен только для совместимости с браузером. Используйте UrlEncode». http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urlpathencode.aspx – VRC

15

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

+1

Если [комментарий является фактическим ответом] (http://stackoverflow.com/questions/1517586/how-do-replace-all-the-spaces-with-20-in-c-sharp/36462468#comment_1517592), кто-то должен ответить на этот вопрос. – palswim

+0

Да, это один обрабатывает пробел, # и%, но кодирует/в% 2f – kite

0

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

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

Надеясь это более прагматичный ответ на вопрос: Я хочу, чтобы сделать строку в 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

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

+0

И эквивалент JavaScript будет чем-то вроде «https: // site/app /? Q =» + encodeURIComponent («поиск кошек») + "& redirectUrl =" + encodeURIComponent ("https: // mysite/myapp /? state = from idp") ', который производит тот же вывод. – nothingisnecessary

2

Как прокомментировал утвержденную историю, метод 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" 

 Смежные вопросы

  • Нет связанных вопросов^_^