web-dev-qa-db-ja.com

URLのプラス(+)記号をエンコードする方法

以下のURLリンクをクリックすると、新しいGoogleメールウィンドウが開きます。私が抱えている問題は、Googleがメール本文のすべてのプラス(+)記号を空白に置き換えることです。 +記号でのみ発生するようです。これを修正する方法に関する提案はありますか? (私はASP.NET Webページを作業しています)

https://mail.google.com/mail?view=cm&tf=0&[email protected]&su=some subject&body =こんにちは、こんにちは

(本文のメールでは、「こんにちは、こんにちは」が「こんにちは、こんにちは」と表示されます)

53
user523234

+文字は、url =>で特別な意味を持ち、空白を意味します。 +記号を使用する場合は、URLエンコードする必要があります。

body=Hi+there%2bHello+there

.NETでURLを適切に生成する方法の例を次に示します。

var uriBuilder = new UriBuilder("https://mail.google.com/mail");

var values = HttpUtility.ParseQueryString(string.Empty);
values["view"] = "cm";
values["tf"] = "0";
values["to"] = "[email protected]";
values["su"] = "some subject";
values["body"] = "Hi there+Hello there";

uriBuilder.Query = values.ToString();

Console.WriteLine(uriBuilder.ToString());

結果

https://mail.google.com:443/mail?view=cm&tf=0&to=someemail%40somedomain.com&su=some+subject&body=Hi+there%2bHello+there

83
Darin Dimitrov

本体にプラス(+)記号が必要ですか?2Bとしてエンコードする必要があります。

例: 試してみてください

16
Black Frog

RFC-3986で「非予約」として定義されている文字を除くすべての文字を常にパーセントエンコードする方が安全です。

未予約= ALPHA/DIGIT/"-"/"。"/"_"/"〜"

そのため、プラス文字とその他の特殊文字をパーセントエンコードします。

プラスの問題は、RFC-1866(HTML 2.0仕様)の8.2.1項によるものです。サブパラグラフ1.、「フォームのフィールド名と値はエスケープされます。スペース文字は「+」に置き換えられ、予約文字はエスケープされます」)。フォームデータをエンコードするこの方法は、後のHTML仕様にも記載されています。application/ x-www-form-urlencodedに関連する段落を探してください。

2
Maxim Masiutin

javaScript言語の場合は、encodeURIComponent関数を使用して特殊文字をエンコードします

2
morteza khadem