3


0

入力パラメーターにプラス記号を渡すにはどうすればよいですか?

入力パラメーターにプラス記号を含むメールアドレスを渡すにはどうすればよいですか?

ユーザー名の値は「[email protected]」です

[email protected]" class="bare">http://domain.com/page1.aspx?username=[email protected]

?うまくいかないようですか?

7 Answer


4


HttpUtility.UrlEncodeメソッドを使用できます。


2


可能な場合は、Server.UrlEncodeメソッドを使用します。

分離コード:

string email = "[email protected]"
lnkThingy.NavigateUrl = "http://www.website.com/Page1.aspx?email=" + Server.UrlEncode(email);


1


URLでは、通常、プラス記号がスペースのプレースホルダーとして使用されます。 「domain.com」はおそらく、そのページを処理する前にスペースに変換し直しています。

あなたはプラスにURLエスケープする必要があります:

 http://domain.com/page1.aspx?username=johnsmith%[email protected]

'+' == ascii 43 == 0x2B。 URLエスケープは「パーセント記号、文字の16進値」です


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("[email protected]")
johnsmith%2b1%40gmail.com
PS G:\Users\Max>


1


これにはhttp://msdn.microsoft.com/en-us/library/4fkewx0t.aspx [HttpUtility.UrlEncode]を使用する必要があります。 URL内で渡されたときに何か他のものを意味する可能性があるすべての文字をエスケープします。 あなたのメールアドレスは次のようになります:

johnsmith%2b1%40gmail.com

+`と `@`の両方は、16進表現を使用してエスケープされ、先頭に `%`が付きます。 これはhttp://www.asciitable.com/ [こちら]( `www.asciitable.com)で確認できます。


0


プラス(+)記号には、クエリ文字列で意味的な意味があります。 スペースを表すために使用されます。ほとんどのサーバー側スクリプトは、クエリパラメータを使用する前にデコードし、+がスペースに適切に変換されるようにします。

そのため、クエリ文字列の値を送信する前に、%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));
}

詳細については、以下のリンクを参照してください

ありがとう


0


UrlDecodeメソッドを呼び出す前に、多くの場合、プラス記号は.NETによってスペース文字にデコードされます。 次の文字列拡張メソッドを使用して問題を修正し、クエリ文字列パラメーターに対するアクセスと制御を改善します。

    ///
    /// Character Encodes a (string).  Specifically used for Querystring parameters.
    ///
    ///
    ///
    /// string
    public static string EncodeForQueryString(this string String)
    {
        String = System.Web.HttpUtility.UrlEncode(String);
        return String;
    }

    ///
    /// Character Decodes a (string).  Specifically used for Querystring parameters.
    ///
    /// 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
    ///
    /// string
    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();

クエリ文字列パラメーター値を取得してデコードするには:

string myDecodedString = Request.Params["q"].DecodeForQueryString();