5

ユーザーが私の Web サイトに電子メールを入力すると、リンクを含む電子メール確認電子メールが送信されます。リンクは次のようになります。

http://mysite.com/VerifyEmail?email=name@domain.com&token=12341234

この特定のユーザーの電子メールには「+」(プラス) が含まれているため、リンクは次のようになります。

http://mysite.com/VerifyEmail?email=foo+bar@domain.com&token=12341234

リンクがクリックされたとき (少なくとも Firefox では) プラスはスペースに置き換えられます。

質問: .net でプラス記号をエスケープするために使用する URL エンコーディング関数は何ですか?

注:Uri.EscapeUriString(email)葉プラス無傷。

4

3 に答える 3

12

代わりに使用できますUri.EscapeDataString- 「Foo+Bar」が「Foo%2BBar」に変換されることを確認しました。

正直なところ、MS がこれらの方法の違いとHttpUtility.UrlEncode(すべてのプラットフォームで利用できるわけではありません) についてもう少しガイダンスを提供してくれれば幸いです。

于 2010-08-11T16:11:05.980 に答える
2

UrlEncodeメソッドを試すことができます。

string encodedEmail = HttpUtility.UrlEncode(email);
于 2010-08-11T16:10:38.067 に答える
0

あなたができる最善のことは、電子メールアドレスをハッシュまたは暗号化するか、トークンにいくらか「含める」ことです.

そうすれば、リンクは次のようになります: http://mysite.com/VerifyEmail?token=12341234480348204023

または: http://mysite.com/VerifyEmail?emailcode=A124E4F325O425FE5F4J6636K66L&token=12341234

ハッシュ ルートに従う場合は、Base64 も+エンコード時に有効な文字として使用されることに注意してください。@ などに置き換えるのが一般的な方法です。

var emailcode = Convert.ToBase64String(GetHashBytes(email)).Replace('+', '@');

次に、確認を実行すると、次のようになります。

var emailcodebytes = Convert.FromBase64String(Request["code"].Replace('@', '+'));
于 2010-08-11T16:22:20.643 に答える