Как заменить специальные символы в URL?
Это, наверное, очень просто, но я просто не могу найти ответ сам:(
В основном, я хочу, учитывая эту строку:
" http://www.google.com/search?hl=en&q=c# objects"
Я хочу этот вывод:
http://www.google.com/search?hl=en&q=c%23+objects
Я уверен, что есть какой-то вспомогательный класс, где-то похоронен в Framework, который позаботится об этом для меня, но мне трудно найти его.
EDIT: я должен добавить, что это для Winforms App.
Ответы
Ответ 1
HttpServerUtility.UrlEncode(строка)
Должны разбираться любые неприятные символы
Чтобы использовать его, вам нужно добавить ссылку на System.Web(Project Explorer > Ссылки > Добавить ссылку > System.Web)
Как только вы это сделали, вы можете использовать его для кодирования любых элементов, которые вы хотите добавить в строку запроса:
System.Web.HttpUtility.UrlEncode("c# objects");
Ответ 2
Если вам не нужна зависимость от System.Web, это реализация "UrlEncode", которая у меня есть в моей библиотеке С# 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
Ответ 3
@Wilfred Knievel имеет принятый ответ, но вы также можете использовать Uri.EscapeUriString()
, если хотите избежать зависимости от пространства имен System.Web
.
Ответ 4
Посмотрите на Server.UrlEncode
http://msdn.microsoft.com/en-us/library/ms525738.aspx