如何在输入参数中传递加号?

时间:2010-09-02 14:37:51

标签: c# asp.net

如何在输入参数中传递带加号的电子邮件地址?

用户名值为“johnsmith+1@gmail.com”

http://domain.com/page1.aspx?username=johnsmith+1@gmail.com

? 它似乎不起作用?

7 个答案:

答案 0 :(得分:4)

您可以使用HttpUtility.UrlEncode方法。

http://msdn.microsoft.com/en-us/library/zttxte6w.aspx

答案 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

+@都使用十六进制表示进行转义,前面加%。您可以自己检查herewww.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();