C#とasp.netを使用して作成されたWebアプリがあります。プラス(+)記号を使用してクエリ文字列にパラメータ値を配置しました。しかし、プラス記号は消えます。
消えることなくクエリ文字列にプラス記号(+)を含めるにはどうすればよいですか?
お知らせ下さい。
ありがとう。
編集:UrlEncodeでコードを追加
string str = Server.UrlEncode(Requery.QueryString["new"]);
C#とasp.netを使用して作成されたWebアプリがあります。プラス(+)記号を使用してクエリ文字列にパラメータ値を配置しました。しかし、プラス記号は消えます。
消えることなくクエリ文字列にプラス記号(+)を含めるにはどうすればよいですか?
お知らせ下さい。
ありがとう。
編集:UrlEncodeでコードを追加
string str = Server.UrlEncode(Requery.QueryString["new"]);
UrlBuilder、私があなたの質問につまずいた方法であるビット役に立たないようです。stackoverflow.com/questions/24576239/…を
UriBuilderURLではない
回答:
+記号は、クエリ文字列で意味的な意味を持ちます。スペースを表すために使用されます。クエリ文字列で意味的に重要なもう1つの文字は、クエリ文字列&のさまざまなvar=valueペアを区切るために使用されます。
ほとんどのサーバーサイドスクリプトは、クエリパラメータを使用する前にデコードするため、+はスペースに適切に変換されます。ここ+で、クエリ文字列にリテラルを含める場合は、%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デコード後にクエリパラメータを処理するときに記号を保持する場合は、URLにクエリパラメータをURLエンコードする必要があります。 HTTP getリクエストの発行を使用する前に、リクエストがサーバー側スクリプトに到達したときにすべての+符号がに変換される%2Bようにします。これで、サーバー側スクリプトがクエリ文字列をURLデコードすると、すべて%2Bのが必要な+記号に変換されます。
JavaScriptでURLをエンコードしますか?を参照してください。JavaScriptを使用してパラメータをURLエンコードする方法を学びます。そこでの議論からの短い答え:
var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);
特殊文字が失われないように、クエリ文字列値をURLエンコードする必要があります。
HTMLURLエンコーディングリファレンスを見てください
+記号をエンコードする必要があります-値は%2Bである必要があります
+記号はクエリパラメータ値で許可されますが、すでに「スペース」がエンコードされているため、エンコードしないでください
誰も混乱しないように、前のステートメントを変更します。
Server.UrlEncodeを使用してURLを作成します。例えば
string myUrl = "http://myurl?param1=" + Server.UrlEncode("my+param+1");
パラメータを送信する前に、パラメータにプラス記号が含まれているかどうかを確認する必要があります。たとえば、1つのフラグに置き換える必要がある場合、パラメータは次のとおりです。klasjdlkasd+ djid3223置き換えることができます:klasjdlkasdFLAGdjid3223
そしてあなたが改宗するとき、あなたは再び取り替える必要があります
klasjdlkasd + djid3223
解決策は、クエリ文字列をリクエストするときに常に.Replace( ""、 "+")を含めることです。
string s = Request.QueryString ["id"]。Trim()。Replace( ""、 "+");