パラメータをクエリ文字列として渡すURLにリダイレクトする必要があります。
これには、値にアンパサンドを含めることができます。といった
string value = "This & That";
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));
ただし、これは http://www.example.com/?Value=This+&+That を返します
この文字列をエンコードするには何を使用すればよいですか?
編集:明白なことを指摘してくれたLukeに感謝します、コードは実際に正しく動作します。申し訳ありませんが、私の質問は結局有効な質問ではありませんでした。
私がしようとしたページには、古いレガシーコードがたくさんありましたが、それは明らかに何らかのエンコードとデコードを行って、urlencodeが機能していないように見せかけていました。
残念ながら私の解決策は、問題のコードが書き直せるようになるまで&の使用を完全に削除することです。古いコードが嫌いではありませんか?
documentation は、Server.UrlEncode
はアンパサンドを正しく処理する必要があります。
私はあなたの正確なコードをテストしました、そして返された文字列は正しくエンコードされました:
技術的にやっている:
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
Server.UrlEncode(string containing the ampersand)
を使用する必要があります。
私はそれをテストしたところ、返されたクエリ文字列は正しくエンコードされてからデコードされました。
HttpUtility
はこの操作では機能しませんでした。
ただし、クエリ文字列に複数のパラメータがある場合、これは正しいです。
例:&firstname = bob&secondName = "Tracy and John"
エスケープが必要なもう1つの文字はアポストロフィです。 %27に置き換えてください。
string url = Server.UrlEncode(value).Replace("'", "%27);
HttpUtility.UrlEncode()およびServer.UrlEncode()は、他の.Net Frameworksとの後方互換性のために、この文字を他のいくつかと一緒に置き換えません。詳細については、このMicrosoftの記事を参照してください。 http://connect.Microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe
そして、GridView
から値を取得している場合、& ampersand
は"&"
:
row.Cells[4].Text.ToString() = xxxx&
したがって、この場合は次のように使用します。
.Replace("&", "%26")
.net core ver 2.1(2018年後半)では、私は以下を使用することができました:
System.Web.HttpUtility.UrlEncode(string_to_encode)