【问题标题】:asp.net querystring formattingasp.net 查询字符串格式化
【发布时间】:2012-10-16 13:43:02
【问题描述】:

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

喜欢:

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")
  ....

它像这样将它存储在数据中:

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

【问题讨论】:

  • @Aristos:当我这样做时,它会显示为 GQH%2fFUvq9sQbWwrYh5xX7G%2b%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw
  • 你在做什么?如果您进行完全替换并编码/解码,则字符串是正确的。

标签: asp.net vb.net query-string request-queueing


【解决方案1】:

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

msdn article

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

GQH%2fFUvq9sQbWwrYh5xX7G%2b%2bVktXU5o17hycAfNSND8gt8YbbUaJbwRw

并对该结果调用 Server.UrlDecode 产生:

GQH/FUvq9sQbWwrYh5xX7G++VktXU5o17hycAfNSND8gt8YbbUaJbwRw

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

【讨论】:

  • 即使我添加了这两件事,似乎仍然遗漏了 ++
  • 那你做错了什么。在将查询字符串数据添加到 url 并将用户重定向到该 url 之前,您需要对查询字符串数据进行 url 编码。当您获取数据时,您只需 Server.UrlDecode(Request.QueryString("data")) 以纯文本形式获取结果。
  • 我正在做 Dim theData As String = HttpUtility.UrlDecode(Request.QueryString("data")) 并且由于某种原因它没有转换?它只是有 ++ 将要去的空间。
  • 您是否在用户点击页面之前对粘贴在 url 上的查询字符串进行编码?
  • 嗯,您是否按照您获得的数据更新了 OP?您发布的编码字符串仅显示一个 %2b ,您说出现了两个空格,这……很奇怪。
【解决方案2】:

你可以:

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

更新

呃。它回到了我的身边 - base64 陷阱:“HttpRequest 的构造函数将为您解析实际字符串 QueryString 和 UrlDecode 值。小心不要双重解码。” - Scott Hanselman

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

【讨论】:

  • MD5 然后转成base64?您如何将 md5 哈希转换为字符串?
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2022-01-12
  • 2012-04-23
相关资源
最近更新 更多