2010-12-15 1 views
1

У меня есть массив с URL-адресами, например http://www.example.com?a=1 1&b=2 2&c=3 3, и мне нужно URL-адрес Кодировать каждый URL-адрес.URLEncoding массив URL-адресов .NET

Но если я использую HttpServerUtility.URLEncode(url) было бы выход http%3a%2f%2fwww.example.com%3fa%3d1+1%26b%3d2+2%26c%3d3+3, но мне нужно, чтобы это выглядело как http://www.example.com?a=1+1&b=2+2&c=3+3

Есть в любом случае для достижения этой цели?

Также значения параметров могут иметь не только пробел, они могут иметь знак &.

+0

Вы пытаетесь закодировать половину строки? – SLaks 2010-12-15 16:20:35

+0

Что не так с выходом для метода UrlEncode? – Nate 2010-12-15 16:22:36

ответ

0

Вы можете сделать это:

string oldUrl = "http://www.example.com?a=1 1&b=2 2&c=3 3" 
string oldUrlSplit = oldUrl.Split('?'); 
string newUrl = oldUrlSplit[0] + HttpUtility.URLEncode(oldUrlSplit[1]); 

Очевидно, что вы хотите обнулить чек и т.п.

Edit:

Я был немного ниже шара на этом. Вы также захотите разделить ваш oldUrlSplit [1] на &, а затем на =, после чего вы будете только URLEncode последней части (после =). Спасибо @ Энтони Пеграм за это.

+1

Что случилось с `.Split ('?')`? – SLaks 2010-12-15 16:22:13

0

Невозможно использовать метод «из коробки», чтобы делать то, что вы хотите. С программной точки зрения, & в QueryString не является тем, что он сможет настроить.

Кроме того, UrlEncoding URL-адрес настраивает его для отправки по URL-адресу, поэтому он будет заменять/и другие символы.

Уверенный, что вы могли бы urlEncode querystring, но это скорее всего вызовет непредсказуемые результаты.

0

Вам необходимо закодировать отдельные элементы НЕ всей строки, чтобы URL-адрес, который вы в конечном итоге закончил, равен http://www.example.com?a=1%201&b=2%202&c=3%203.

Вы можете увидеть, как пробелы внутри были преобразованы в% 20, но это было только фактические переменные «1 1» «2 2» «3 3», которые на самом деле вход в HttpServerUtility.URLEncode()

Как Митчел говорит, что это не будет решением «из коробки», но вы можете так поиграть, чтобы извлечь эти переменные для UrlEncoding.

1

Спасибо всем за ваши ответы, вы помогли мне придумать решение, которое я мог бы использовать.

 Dim sURL As String = "http://www.example.com?a=1 1&b=2 2&c=3 3" 
    Dim sURLParameters = sURL.Split("?") 
    Dim parameters As NameValueCollection 

    parameters = HttpUtility.ParseQueryString(sURLParameters(1)) 

    sURL = sURLParameters(0) & "?" 
    For i As Integer = 0 To parameters.Count - 1 
     sURL += parameters.Keys(i).ToString & "=" & Server.UrlEncode(parameters.Item(i).ToString) 
    Next 

    Response.Write(sURL) 

Эта ссылка приводит меня в решение ParseQueryString.

.Net C# regex for parsing URL parameters