【问题标题】:URLEncoding an Array of URLs .NETURLEncoding 一个 URL 数组 .NET
【发布时间】:2010-12-15 16:16:34
【问题描述】:

我有一个包含 http://www.example.com?a=1 1&b=2 2&c=3 3 之类的 URL 的数组,我需要对每个 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

有没有办法做到这一点?

此外,参数值不仅可以有空格,还可以有 & 符号。

【问题讨论】:

  • 您是否要对字符串的一半进行编码?
  • UrlEncode 方法的输出有什么问题?

标签: .net url urlencode


【解决方案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

【讨论】:

    【解决方案2】:

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

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

    当然,您可以对查询字符串进行 urlEncode,但这很可能会导致意外结果。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      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 指出这一点。

      【讨论】:

      • @Slaks: 什么都没有 :-) 我必须回到石器时代,那时只能将字符数组传递给Split。相应地更新。谢谢。
      • 这是不完整的。 = 也会被编码,这会破坏查询字符串。更进一步,随后在 = 上进行拆分也可能无效,因为它很可能是值的一部分。
      • @Anthony Pegram:相应更新。谢谢你指出我的不足。
      【解决方案4】:

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

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

      就像 Mitchel 说的那样,这不会是一个开箱即用的解决方案,但您可以进行一些操作以便为 UrlEncoding 提取这些变量。

      【讨论】:

      • 你知道我可以解析每个 URL 参数并编码值的方法吗?
      • 可以使用正则表达式,但我不太愿意推荐,因为我相信几乎可以肯定有更好的方法
      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2014-04-30
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多