2010-12-15 55 views
1

我有一个像http://www.example.com?a=1 1&b=2 2&c=3 3这样的URL的数组,我需要URL对每个URL进行编码。URLEncoding一组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

反正有没有做到这一点?

另外参数值不仅可以有空格,而且可以有一个&符号。

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

显然,要空检查等

编辑:

我有点短就这一个球。你也会想拆分你的oldUrlSplit [1] &,然后=,之后你只会URLEncode后一部分(在=之后)。感谢@Anthony Pegram指出了这一点。

+1

'.Split('?')'有什么问题? – SLaks 2010-12-15 16:22:13

+0

@Slaks:什么也没有:-)我必须回到石器时代,只有一个字符数组可以传入“Split”。相应更新。谢谢。 – 2010-12-15 16:24:29

+0

这是不完整的。 '='也会被编码,这会破坏查询字符串。更进一步,随后在'='上分割也可能是无效的,因为它可能是一个值的一部分。 – 2010-12-15 16:24:40

0

不会有一种开箱即用的方法来做你想做的事情。从编程角度来看,QueryString中的&不是它能够设置的东西。

此外,UrlEncoding的URL设置为通过URL发送,这就是为什么它要取代/和其他字符。

当然你可以urlEncode查询字符串,但这很可能会导致意外的结果。

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提取这些变量。

+0

你知道我可以通过每个URL参数解析并编码值吗? – 2010-12-15 16:56:54

+0

你*可以*使用正则表达式,但我不情愿推荐,因为我相信几乎肯定有更好的方法 – 2010-12-15 17:01:10

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