如何在输入参数中传递带加号的电子邮件地址?
用户名值为“johnsmith+1@gmail.com”
http://domain.com/page1.aspx?username=johnsmith+1@gmail.com
? 它似乎不起作用?
答案 0 :(得分:4)
您可以使用HttpUtility.UrlEncode方法。
答案 1 :(得分:2)
如果可以,请使用Server.UrlEncode方法:
代码隐藏:
string email = "johnsmith+1@gmail.com"
lnkThingy.NavigateUrl = "http://www.website.com/Page1.aspx?email=" + Server.UrlEncode(email);
答案 2 :(得分:1)
在网址中,加号通常用作空格的占位符。 “domain.com”可能会在处理该页面之前将其翻译回空间。
您需要将网址转义为加号:
http://domain.com/page1.aspx?username=johnsmith%2b1@gmail.com
'+'== ascii 43 == 0x2B。 Url转义是“百分号;字符的十六进制值”
答案 3 :(得分:1)
JohnSmith对%2B1%40gmail.com
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS G:\Users\Max> [reflection.assembly]::loadwithpartialname("System.Web")
GAC Version Location
--- ------- --------
True v2.0.50727 G:\Windows\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll
PS G:\Users\Max> [web.httputility]::UrlEncode("johnsmith+1@gmail.com")
johnsmith%2b1%40gmail.com
PS G:\Users\Max>
答案 4 :(得分:1)
您应该使用HttpUtility.UrlEncode
。当在url中传递时,它会逃避所有可能意味着其他内容的字符。您的电子邮件地址如下:
johnsmith%2b1%40gmail.com
+
和@
都使用十六进制表示进行转义,前面加%
。您可以自己检查here(www.asciitable.com
)。
答案 5 :(得分:0)
Plus(+)符号在查询字符串中具有语义含义。它用于表示空间。大多数服务器端脚本会在使用它们之前解码查询参数,以便正确地获取+ 转换为空间。
所以在发送查询字符串中的值之前转换+符号与%2B然后发送。以下是示例代码。
protected void btnRedirect_Click(object sender, EventArgs e)
{
string signature="f1wRcMvJJ2YjLjc8dc+7ykY9szg=&kanna";
signature = signature.Replace("+", "%2B");
Response.Redirect("Encode-Decode-QueryString.aspx?sign=" + Server.UrlEncode(signature));
}
您可以参考以下链接了解更多详情
http://www.dotnetpickles.com/2014/02/aspnet-how-to-pass-plus-in-query-string.html
由于
答案 6 :(得分:0)
在您有机会调用UrlDecode方法之前,加号通常由.NET解码为空格字符。我使用以下字符串扩展方法来纠正问题,并提供对查询字符串参数的更好的访问和控制。
/// <summary>
/// Character Encodes a (string). Specifically used for Querystring parameters.
/// </summary>
/// <remarks></remarks>
/// <param name="String"></param>
/// <returns>string</returns>
public static string EncodeForQueryString(this string String)
{
String = System.Web.HttpUtility.UrlEncode(String);
return String;
}
/// <summary>
/// Character Decodes a (string). Specifically used for Querystring parameters.
/// </summary>
/// <remarks>The plus sign causes issues when using System.Web.HttpUtility.UrlDeEncode. The plus sign is often decoded before it reaches this method. This method will replace any extra + with %2b before attempting to decode</remarks>
/// <param name="String"></param>
/// <returns>string</returns>
public static string DecodeForQueryString(this string String)
{
String = String.Replace("+", "%2b");
String = System.Web.HttpUtility.UrlDecode(String);
return String;
}
为查询字符串参数值创建编码字符串:
string myUrl = "myPage.htm?q=" + "Saving+Silverman".ToString().EncodeForQueryString();
获取并解码querystring参数值:
string myDecodedString = Request.Params["q"].DecodeForQueryString();