2009-02-10 2 views
15

Это, вероятно, очень простой, но я просто не могу найти ответ сам :(Как заменить специальные символы в URL?

Basicaly, что я хочу, учитывая эту строку:

«http://www.google.com/search?hl=en&q=c# объекты»

Я хочу, чтобы этот вывод:

http://www.google.com/search?hl=en&q=c%23+objects

Я уверен, что есть какой-то вспомогательный класс где-то утопает в рамках, которая заботится о том, что для меня, но я га Невозможно найти его.

EDIT: Я должен добавить, что это приложение Winforms.

+0

Что-то, кажется, слишком сильно. Где вы получаете URL-адрес без сброса ваших значений запроса? Если вы сами создаете URL-адрес, вы должны избегать значений запроса («en» и «C# objects»), ** затем ** объединить их в URL-адрес. – DLJessup

ответ

13

HttpServerUtility.UrlEncode(string)

Если разобраться какие-либо неприятные персонажи

Для этого вам нужно добавить ссылку на System.Web (проект Explorer> Ссылки> Добавить ссылку> System.Web)

После того, как вы это сделали, вы можете использовать его для кодирования любых элементов, которые вы хотите добавить в строку запроса:

System.Web.HttpUtility.UrlEncode("c# objects"); 
+0

Dang 58 секунд слишком медленно, время прорыва Mavis Beacon! ;-) –

+0

Хмм не знал об этом. :) – Dacto

+0

Спасибо Wilfred .. Я тоже не знаю об этом :) – Shoban

6

Посмотрите на Server.UrlEncode

http://msdn.microsoft.com/en-us/library/ms525738.aspx

+0

Не думайте, что это сработает, я работаю над приложением Winforms. – BFree

+0

Вы должны все еще иметь возможность ссылаться на соответствующую библиотеку для выполнения этой операции кодирования. – Perhentian

9

@Wilfred Knievel имеет принятый ответ, но вы также можете использовать Uri.EscapeUriString(), если вы хотите, чтобы избежать зависимости от System.Web имен.

+0

лучшее решение, если вы используете только .net-клиент. – dmihailescu

+0

Этот вариант отлично подходит для простого кодирования специальных символов, таких как акценты, а не для всего, как косые черты или двоеточия. – Andrew

10

Если вы не хотите, чтобы зависимость от System.Web представляла собой реализацию «UrlEncode», я имею в своей библиотеке C# OAuth (которая требует правильной реализации, а именно, пробелы должны быть закодированы с использованием процента кодирования, а «+ "для пространств и т.д.)

private readonly static string reservedCharacters = "!*'();:@&=+$,/?%#[]"; 

public static string UrlEncode(string value) 
{ 
    if (String.IsNullOrEmpty(value)) 
     return String.Empty; 

    var sb = new StringBuilder(); 

    foreach (char @char in value) 
    { 
     if (reservedCharacters.IndexOf(@char) == -1) 
      sb.Append(@char); 
     else 
      sb.AppendFormat("%{0:X2}", (int)@char); 
    } 
    return sb.ToString(); 
} 

Справочно http://en.wikipedia.org/wiki/Percent-encoding

+0

Хорошо! В отличие от методов в System.Web это также кодирует специальные символы. (Пришлось добавить '-' в список символов reserverd) – Grastveit

+0

Что относительно пробелов? Они не были закодированы до% 20, как должны. – pstarkov

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