URLEncoding一个URL数组.NET

时间:2010-12-15 16:16:35

标签: .net url urlencode

我有一个包含http://www.example.com?a=1 1&b=2 2&c=3 3等网址的数组,我需要对每个网址进行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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]);

显然,你想要检查等等。

修改

我在这个球上略显缺球。您还需要在&上拆分旧的UrlSplit [1],然后在=上拆分,之后您将只对后一部分进行URLEncode(在=之后)。感谢@Anthony Pegram指出这一点。

答案 2 :(得分:0)

没有一种开箱即用的方法可以做你想做的事。从程序化的角度来看,&在QueryString中不是它能够设置的东西。

此外,UrlEncoding一个URL是将其设置为通过URL发送,这就是它将替换/和其他字符的原因。

当然你可以对命令串进行urlEncode,但这很可能会导致意想不到的结果。

答案 3 :(得分:0)

您需要对单个元素进行编码而不是整个字符串,因此您最终得到的网址是http://www.example.com?a=1%201&b=2%202&c=3%203

你能看到其中的空格如何转换为%20,但它只是实际变量“1 1”“2 2”“3 3”,实际输入HttpServerUtility.URLEncode()

就像Mitchel说的那样,这不是一个开箱即用的解决方案,但为了为UrlEncoding提取这些变量,你可以这样做一些小事。