在URI中转义+(加号)

时间:2010-08-11 16:08:46

标签: .net urlencode url-encoding

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

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)离开并保持原样。

3 个答案:

答案 0 :(得分:12)

您可以使用Uri.EscapeDataString - 我刚刚确认将“Foo + Bar”转换为“Foo%2BBar”。

老实说,如果MS对这些方法之间的差异以及HttpUtility.UrlEncode(在所有平台上都不提供)提供了更多指导,我将不胜感激。

答案 1 :(得分:2)

您可以尝试UrlEncode方法:

string encodedEmail = HttpUtility.UrlEncode(email);

答案 2 :(得分: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('@', '+'));