如何处理URL参数中的&符号?

时间:2013-03-25 02:27:17

标签: asp-classic urlencode

我遇到以下问题:

我正在使用一个应用程序,允许用户连接文本以构建一个URL,通过GET方法将参数传递给ASP页面,例如:

http://myhostname/process.asp?param1=value1&param2=value2

问题是value1,value2可以包含&符号,不能解释为文本字符。

此问题最常用的解决方案是对URL进行编码,这对我来说不是一个选项,因为我无法修改构建URL的程序。我可以修改process.asp页面,但不能修改连接文本字段并构建URL的程序。

我试图搜索的内容是:

  • 如何使用javascript直接在浏览器中对URL进行编码

  • 如何在阅读&

  • 时更改IIS默认行为
  • 传递参数的其他方法,例如将它们作为用管道分隔的单个字符串传递

希望你能给我一些指导。

2 个答案:

答案 0 :(得分:1)

您可以阅读整个查询字符串并自行解析,如下所示:

  q = Request.QueryString
  a = Split(q, "=")
  i = 1
  For Each s In a
    If i mod 2 = 0 Then
      If InStr(s, "&") <> InStrRev(s, "&") Then
        Response.Write "Value: " & Left(s, InStrRev(s, "&") - 1) & "<br/>"
        hidingParam = Right(s, Len(s) - InStrRev(s, "&"))
        Response.Write "PAramName: " & hidingParam & "<br/>"
        i = i + 1
      Else
        Response.Write "Value: " & s & "<br/>"
      End If
    Else
      Response.Write "PAramName: " & s & "<br/>"
    End If
    i = i + 1
  Next


结果:

网址:...?Q=abc&def&P=123生成

  

PAramName:Q
值:abc&amp; def
PAramName:P
值:123

请注意,这不太健壮。我只是在说明我的想法。我没有测试没有&

它也不会处理多个“=”字符(如果这也是可能的话)。

答案 1 :(得分:-1)

如果等于两个(或更多)&符号,则只有最后一个是参数分隔符。因此,使用上面的网址,并假设 value1 =“ abc&amp; def ”, value2 =“ 123 “,然后URL将如下所示:

http://myhostname/process.asp?param1=abc&def&param2=123

请注意,在2个等于之间有2个&符号。最后一个将是您的参数分隔符,其余的是值的一部分。并且在最后一个等于之后的任何&符号也是值的一部分。

您必须剖析传入的URL并应用适当的逻辑。