23

パラメータをクエリ文字列として渡す URL にリダイレクトする必要があります。

これには、値にアンパサンドを含めることができます。そのような

string value = "This & That";
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));

ただし、これはhttp://www.example.com/?Value=This+&+Thatを返します

この文字列をエンコードするには何を使用すればよいですか?

編集: 明らかなことを指摘してくれたルークに感謝します。コードは実際に正しく動作します。申し訳ありませんが、私の質問は有効な質問ではありませんでした。

私がしようとしていたページには、古いレガシーコードがたくさんあり、それ自体が何らかのエンコードとデコードを行っているようで、私の urlencode が機能していないように見えます。

残念ながら、私の解決策は、問題のコードが書き直せるようになるまで & の使用を完全にやめることです。古いコードが嫌いなだけではありませんか。

4

7 に答える 7

24

ドキュメントは、Server.UrlEncodeアンパサンドを正しく処理する必要があることを示唆しています。

正確なコードをテストしたところ、返された文字列は正しくエンコードされていました。

http://www.example.com/?Value=This+%26+That

于 2009-02-18T17:41:32.047 に答える
18

技術的に行う:

value = value.Replace("&", "%26") 

トリックを行います。

編集: UrlEncode/HttpEncode メソッド全体には、うまくいかないトリッキーな問題がいくつかあるようです。少し前に、便利かもしれない簡単な方法を書きました。これにより、主要なエンコーディングの問題がすべてカバーされ、「デサニタイザー」も簡単に作成できます。

Protected Function SanitizeURLString(ByVal RawURLParameter As String) As String

      Dim Results As String

      Results = RawURLParameter    

      Results = Results.Replace("%", "%25")
      Results = Results.Replace("<", "%3C")
      Results = Results.Replace(">", "%3E")
      Results = Results.Replace("#", "%23")
      Results = Results.Replace("{", "%7B")
      Results = Results.Replace("}", "%7D")
      Results = Results.Replace("|", "%7C")
      Results = Results.Replace("\", "%5C")
      Results = Results.Replace("^", "%5E")
      Results = Results.Replace("~", "%7E")
      Results = Results.Replace("[", "%5B")
      Results = Results.Replace("]", "%5D")
      Results = Results.Replace("`", "%60")
      Results = Results.Replace(";", "%3B")
      Results = Results.Replace("/", "%2F")
      Results = Results.Replace("?", "%3F")
      Results = Results.Replace(":", "%3A")
      Results = Results.Replace("@", "%40")
      Results = Results.Replace("=", "%3D")
      Results = Results.Replace("&", "%26")
      Results = Results.Replace("$", "%24")

      Return Results

End Function
于 2009-02-18T17:05:32.070 に答える
2

ただし、クエリ文字列に複数のパラメータがある場合、これは正しいです。

例:&firstname = bob&secondName = "Tracy and John"

于 2011-03-25T13:19:51.053 に答える
2

を使用する必要がありますServer.UrlEncode(string containing the ampersand)

テストしたところ、返されたクエリ文字列は正しくエンコードされ、デコードされました。

HttpUtilityこの操作では機能しませんでした。

于 2012-06-20T13:55:34.073 に答える
2

エスケープが必要なもう 1 つの文字は、アポストロフィです。%27 に置き換えます。

string url = Server.UrlEncode(value).Replace("'", "%27);

HttpUtility.UrlEncode() および Server.UrlEncode() は、他の .Net Framework との下位互換性のために、この文字を他のいくつかの文字と一緒に置き換えません。詳細については、このマイクロソフトの記事を参照してください: http://connect.microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe

于 2010-09-22T16:18:07.770 に答える
1

から値を取得している場合、次GridView& ampersandように表示される可能性があります"&amp;"

row.Cells[4].Text.ToString() = xxxx&amp;

したがって、この場合、次を使用する必要があります。

.Replace("&amp;", "%26")
于 2012-03-16T14:49:00.397 に答える