URLE кодирование массива URL .NET - PullRequest
1 голос
/ 15 декабря 2010

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

Но если я использую 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

Есть ли способ достичь этого?

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

Ответы [ 4 ]

1 голос
/ 15 декабря 2010

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

        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 # регулярное выражение для анализа параметров URL

0 голосов
/ 15 декабря 2010

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

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

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

0 голосов
/ 15 декабря 2010

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

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

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

0 голосов
/ 15 декабря 2010

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

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]);

Очевидно, вы хотите проверить на ноль и т. Д.

Редактировать:

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

...