我有一个包含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
无论如何要实现这个目标吗?
参数值不仅可以有空格,还可以有&登录。
答案 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解决方案。
答案 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提取这些变量,你可以这样做一些小事。