プラスサインインクエリ文字列


86

C#とasp.netを使用して作成されたWebアプリがあります。プラス(+)記号を使用してクエリ文字列にパラメータ値を配置しました。しかし、プラス記号は消えます。

消えることなくクエリ文字列にプラス記号(+)を含めるにはどうすればよいですか?

お知らせ下さい。

ありがとう。

編集:UrlEncodeでコードを追加

string str = Server.UrlEncode(Requery.QueryString["new"]);

実際には、値はユーザー入力によって異なります。
domlao 2011

FYI注意してくださいUrlBuilder、私があなたの質問につまずいた方法であるビット役に立たないようです。stackoverflow.com/questions/24576239/…を
KCD 2015年

* UriBuilderURLではない
KCD

回答:


146

+記号は、クエリ文字列で意味的な意味を持ちます。スペースを表すために使用されます。クエリ文字列で意味的に重要なもう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);

1
JavaScriptで+記号を%2Bに置き換えるにはどうすればよいですか。javascriptでクエリ文字列を作成しているからです。
domlao 2011

5

特殊文字が失われないように、クエリ文字列値をURLエンコードする必要があります。


1
このように、string str = Server.UrlEncode(Requery.QueryString ["new"]); ?THanks
domlao 2011

完全ではありませんが、それらを取り出すときではなく、クエリ文字列に入れる前にエンコードする必要があります。クエリ文字列の値をどのように設定していますか?
DoctorMick 2011

Javascriptでは、$( "#btn")。click(function(){var param = "c ++"; ...});のようになります。
domlao 2011


1

誰も混乱しないように、前のステートメントを変更します。

Server.UrlEncodeを使用してURLを作成します。例えば

string myUrl = "http://myurl?param1="  + Server.UrlEncode("my+param+1");

3
URLの場合は、HTMLエンコードではなくURLエンコードを行う必要があります。それら異なります。
damien_The_Unbeliever 2011

クエリ文字列をJavaScriptに追加しましたが、JavaScriptでエンコードする方法はありますか?
domlao 2011

0

他の簡単な方法は、Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1)私のURLが、http://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==


0

パラメータを送信する前に、パラメータにプラス記号が含まれているかどうかを確認する必要があります。たとえば、1つのフラグに置き換える必要がある場合、パラメータは次のとおりです。klasjdlkasd+ djid3223置き換えることができます:klasjdlkasdFLAGdjid3223

そしてあなたが改宗するとき、あなたは再び取り替える必要があります

klasjdlkasd + djid3223


-1

これを試してください、それは私のために働きます:

Request.QueryString["new"].Trim();


-2

DecryptFuncationに次の行を追加します。

strText = strText.Replace(" ", "+");

2
他の予約文字はどうですか?このソリューションは+のみを修正し、?は修正しません。など
John Mc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.