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

次のようにデータ内に保存します。

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. マイクが述べたように、上記のbase64文字列をHttpServerUtility.UrlEncodeすることができます(逆にデコードする)
  2. 両端でMSを使用している場合は、HttpServerUtility.UrlTokenEncodeを調べることもできます。このオプションを選択した場合は、このメモを参照してください。

アップデート

うーん。それは私に戻ってきました-base64gotchas:"HttpRequestのコンストラクターは、実際の文字列QueryStringとUrlDecodeの値を解析します。二重デコードしないように注意してください。" -スコット・ハンゼルマン

私の個人的な提案は、base64を実行する場合はUrlTokenルートを使用することです...

于 2012-10-16T14:14:20.730 に答える