代码之家  ›  专栏  ›  技术社区  ›  THX-1138

URI中的Escape+(plus)

  •  5
  • THX-1138  · 技术社区  · 14 年前

    当用户在我的网站上输入电子邮件时,我会发送一封包含链接的电子邮件验证电子邮件。链接看起来像:

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

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

    当点击链接时(至少在Firefox中),plus会被一个空格替换。

    我在.net中使用什么URL编码函数来转义加号。

    Uri.EscapeUriString(email) 完整无缺。

    3 回复  |  直到 14 年前
        1
  •  12
  •   Jon Skeet    14 年前

    你可以用 Uri.EscapeDataString

    老实说,如果微软能就这些方法之间的区别提供更多的指导,以及 HttpUtility.UrlEncode (并非所有平台都提供)。

        2
  •  2
  •   Darin Dimitrov    14 年前

    你可以试试 UrlEncode 方法:

    string encodedEmail = HttpUtility.UrlEncode(email);
    
        3
  •  0
  •   Fábio Batista Raza Ahmed    13 年前

    这样,您的链接可以如下所示: http://mysite.com/VerifyEmail?token=12341234480348204023

    或: http://mysite.com/VerifyEmail?emailcode=A124E4F325O425FE5F4J6636K66L&token=12341234

    + 作为编码时的有效字符。通常的做法是用@或其他东西代替它:

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

    然后,在执行确认时:

    var emailcodebytes = Convert.FromBase64String(Request["code"].Replace('@', '+'));