C# と asp.net を使用して作成した Web アプリケーションがあります。クエリ文字列にプラス記号 (+) を付けてパラメータ値を配置しました。しかし、プラス記号が消えてしまいます。
プラス記号 (+) を消えずにクエリ文字列に含めるにはどうすればよいですか?
お知らせ下さい。
ありがとう。
編集: UrlEncode でコードを追加しました
string str = Server.UrlEncode(Requery.QueryString["new"]);
ベストアンサー1
+
クエリ文字列では、記号は意味を持ちます。これはスペースを表すために使用されます。クエリ文字列で意味的に重要な別の文字は、クエリ文字列内の&
さまざまなペアを区切るために使用される文字ですvar=value
。
ほとんどのサーバー側スクリプトは、クエリ パラメータを使用する前にデコードし、a が+
適切にスペースに変換されるようにします。+
クエリ文字列にリテラルを含める場合は、%2B
代わりに を指定する必要があります。
+
クエリ文字列内の記号は、URL デコードされてスペースになります。%2B
クエリ文字列内の記号は、URL デコードされて + 記号になります。
違いを見てください
http://www.google.com/search?q=foo+bar
そして
http://www.google.com/search?q=foo%2Bbar
上記の例では、Google のサーバー スクリプトがクエリ パラメータを URL デコードし、それを使用して検索を行っています。
URL エンコードは、%
記号に続いて特殊文字の 16 進コードが続くだけです。たとえば、の 16 進コードはA
0x41 (10 進数: 65) であることがわかっています。次のように試してください。
http://www.google.com/search?q=%41
これで URL エンコードが明確になると思います。
したがって、+
JavaScript が+
クエリ パラメータに記号を含む URL を取得し、サーバー側スクリプトが URL デコード後にクエリ パラメータを処理するときに記号を保持したい場合は、HTTP GET 要求を発行する前に URL 内のクエリ パラメータを URL エンコードして、要求がサーバー側スクリプトに到達したときにすべての+
記号が 's に変換されるように%2B
する必要があります。これで、サーバー側スクリプトがクエリ文字列を URL デコードすると、すべての's が目的どおりに記号%2B
に変換されます。+
見るJavaScript で URL をエンコードしますか?JavaScript を使用してパラメータを URL エンコードする方法を学びます。そこでの議論からの短い回答:
var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);