web-dev-qa-db-ja.com

クエリ文字列で使用するASP.Net URLEncode Ampersand

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

これには、値にアンパサンドを含めることができます。といった

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

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

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

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

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

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

20
Robin Day

documentation は、Server.UrlEncodeはアンパサンドを正しく処理する必要があります。

私はあなたの正確なコードをテストしました、そして返された文字列は正しくエンコードされました:

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

23
LukeH

技術的にやっている:

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
16
Dillie-O

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

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

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

2
Omgee Cares

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

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

2
tigerdev

エスケープが必要なもう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

2
goku_da_master

そして、GridViewから値を取得している場合、& ampersand"&amp;"

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

したがって、この場合は次のように使用します。

.Replace("&amp;", "%26")
1
Kinch

.net core ver 2.1(2018年後半)では、私は以下を使用することができました:

System.Web.HttpUtility.UrlEncode(string_to_encode)
0
Eli