0

如何在查询字符串中发送特殊字符?

喜欢:

thankyou.aspx?data=GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw

当我这样做时, ++被取出:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim theData As String = Request.QueryString("data")
  ....

它将它存储在 theData 中,如下所示:

GQH/FUvq9sQbWwrYh5xX7G VktXU5o17hycAfNSND8gt8YbbUaJbwRw

因此,它是无效的。我怎样才能正确地发送该字符串而不会在收到后更改?

更新

这样做:

Dim en As String = endecryption.EncryptData("=" & "aclub" & "=" & strName & "=" & strEmail)
Response.Redirect("/thankyou.aspx?data=" & HttpUtility.UrlEncode(en), False)

在另一端:

Dim theData As String = HttpUtility.UrlDecode(Request.QueryString("data"))

它像这样发送它:GQH%2fFUvq9sQbWwrYh5xX7G%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw

但它的解码方式如下:GQH/FUvq9sQbWwrYh5xX7G[2 个空格]VktXU5o17hycAfNSND8gt8YbbUaJbwRw

4

2 回答 2

3

看看使用 Server.UrlEncode() 在将参数包含在查询字符串中之前对其进行编码,并在需要时使用 Server.UrlDecode() 将其转换回来。

msdn文章

在“GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw”上调用 Server.UrlEncode() 产生:

GQH%2fFUvq9sQbWwrYh5xX7G%2b%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw

并在该结果上调用 Server.UrlDecode 会产生:

GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw

在将查询字符串数据附加到 url 之前,您需要确保对查询字符串数据进行 url 编码。

于 2012-10-16T13:45:15.007 回答
1

你可以:

  1. 正如迈克所说,您可以HttpServerUtility.UrlEncode上面的 base64 字符串(并反过来解码)
  2. 如果您在两端都坚持使用 MS,您还可以查看HttpServerUtility.UrlTokenEncode -如果您选择此选项,请参阅此说明

更新

啊。它回到了我的身边——base64 陷阱:“HttpRequest 的构造函数将为你解析实际的字符串 QueryString 和 UrlDecode 值。小心不要双重解码。” ——斯科特·汉塞尔曼

如果你要做base64,我个人的建议是走UrlToken路线......

于 2012-10-16T14:14:20.730 回答