[ ASP.NET ] GET メソッドでデータの送受信と URL エンコード(デコード)

Pocket

GET メソッドで別ページにデータの送信を行う場合は、URL の後ろにキーと値を文字列で連結させて送信します。 以下は、キー( id ) に値 “001” を、キー( name )に値 “gesunokiwamiotome” を設定している例になります。 なお、複数のデータを送るために & で連結しています。

スポンサーリンク

http://host/WebForm1.aspx?id=001&name=gesunokiwamiotome

GET メソッドで送信されたデータを取得する

ASP.NET では GET メソッドで送信されたデータを、Page.Request.QueryString.Get メソッドで取得することができます。

VB.NET

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
                            Handles Me.Load
                            
        ' Get メソッドにはキー名を設定し、値を取得する                    
        Dim id As String = Page.Request.QueryString.Get("id")
        Dim name As String = Page.Request.QueryString.Get("name")                    
    End Sub      

C#

    protected void Page_Load(object sender, EventArgs e)
    {
        // Get メソッドにはキー名を設定し、値を取得する                    
        string id = Page.Request.QueryString.Get("id");
        string name = Page.Request.QueryString.Get("name");
    }
不完全な URL の記述

URL 内の GET パラメータの記述が不完全な場合に、Page.Request.QueryString.Get メソッドでどのように値を取得できるかを下表にまとめます。

URL 内容 Page.Request.QueryString.Get
http://host/WebForm1.aspx? キー、値ともに記述なし null(VBはNothing)
http://host/WebForm1.aspx?id キーのみ、イコール含めて値なし null(VBはNothing)
http://host/WebForm1.aspx?id= キー、イコールあり、値なし 空文字列(※正常)
日本語を GET メソッドで送受信する

以下のように、GET メソッドで日本語を送信する場合について確認してみます。

http://host/WebForm1.aspx?id=001&name=ゲスの極み乙女

このように、単純に日本語を URL に設定してサーバにリクエストを送っても、サーバで取得したデータはクライアントが期待している値として受信できていない可能性があります。いわゆる、文字化けです。また、サーバーによっては URL として受け付けてさえもらえない可能性すらあります。

実は、 URL として使用可能な文字は RFC3986 により定められていて、それ以外の禁則文字を URL に使用する場合は URL エンコードを行なわなければなりあません。なお、URL に使用できる文字は以下のような文字がありますが、詳細は「RFC3986 URI Generic Syntax」を参照ください。

[ A – Z ], [ a – z ], [ 0 – 9 ], [ ( ], [ ) ], [ – ], [ _ ] 

実際に上記の URL をエンコード(文字コード:UTF-8)した結果は以下のとおりです。

http://host/WebForm1.aspx?id=001&name=%E3%82%B2%E3%82%B9%E3%81%AE%E6%A5%B5%E3%81%BF%E4%B9%99%E5%A5%B3

同じ日本語でも、文字コードによっては URL エンコードした結果が異なります。そのため、送信側と 受信側で同一の文字コードでエンコードおよびデコードを行うことが必要です。 なお、ASP.NET では、デフォルトで文字コードに UTF-8 が使用されます。

URL エンコード

ASP.NET では、Server.UrlEncode を使用してエンコードを行うことができます。

VB.NET

    Dim name As String = "ゲスの極み乙女"
    
    Dim url As String = "WebForm1.aspx?id=000&name=" + Server.UrlEncode(name)
    Response.Redirect(url)

C#

    string name = "ベッキー";
    
    string url = "WebForm1.aspx?id=000&name=" + Server.UrlEncode(name);
    Response.Redirect(url);
URL デコード

Server.UrlEncode でエンコードした結果を、Server.UrlDecode でデコードしています。

VB.NET

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
                            Handles Me.Load
                            
        ' Get メソッドにはキー名を設定し、値を取得する                    
        Dim id As String = Page.Request.QueryString.Get("id")
        Dim name As String = Page.Request.QueryString.Get("name")
        ' URL デコードを行う
        name = Server.UrlDecode(name)

C#

    protected void Page_Load(object sender, EventArgs e)
    {
        // Get メソッドにはキー名を設定し、値を取得する                    
	    string id = Page.Request.QueryString.Get("id");
	    string name = Page.Request.QueryString.Get("name");
        // URL デコードを行う
        name = Server.UrlDecode(name);
    }

ベッキーかわいいです。

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *