HOWTO: XMLHTTPを使用して2バイト文字を含むFormデータを送信する

  JP418460



  
概要
この資料では、2 バイト文字 (DBCS) を含む FORM データを Application Server Page (ASP) に送信する方法
を XMLHTTP を使用して説明しています。




詳細
XMLHTTP オブジェクトまたは、ServerXMLHTTP オブジェクトを使用して DBCS を含む FORM データを送信する
場合、URL エンコードを行う必要があります。
ここでは、Visual Basic を使用した URL エンコードのサンプル コードと、それを使用してデータを ASP に送信する
例を示します。 URL エンコードに関しては RFC 1738 Uniform Resource Locators (URL) をご参照ください。 

Visual Basic を起動し、新規に標準 EXE プロジェクトを作成します。 


参照設定に "Microsoft XML, v3.0" または、それ以降のバージョンの XML を追加します。 


Form1 にボタンを 1 つ貼り付け、以下のコードを Form1 にコピーします。 
        Option Explicit
        Private Sub Command1_Click()
            Dim DataToSend As String
            Dim xh As New xmlhttp
            DataToSend = "山田 太郎"
            xh.open "POST", "http://localhost/Receiver.asp", False
            'Content-Type ヘッダーを必ず設定する必要があります。
            xh.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            '送信するデータを URL エンコードします。
            DataToSend = "uid=" & URLEncode(DataToSend)
            Debug.Print "送信したデータ: " & DataToSend
            xh.send DataToSend
            'responseBody メソッドで受信した文字列を Visual Basic で扱う場合、
            'UNICODE へデコードする必要があります。
            Debug.Print "受信したデータ: " & StrConv(xh.responseBody, vbUnicode)
        End Sub
        Function URLEncode(src As String) As String
            Dim b() As Byte
            Dim ret As String
            Dim i As Integer
            ' Shift-JIS に変換します。
            b = StrConv(src, vbFromUnicode)
            For i = LBound(b) To UBound(b)
                If &H20 <= b(i) And b(i) <= &H7E Then '表示可能な ASCII 文字の場合
                    Select Case Chr(b(i))
                    Case "+", ";", "/", "?", ":", "@", "=", "&", "<", ">", """", "'", "#", "%"
                        ' URL 予約文字などは、16 進形式に変換します。
                        ret = ret & "%" & Hex(b(i))
                    Case " "
                        ' スペースは '+' に変換します。
                        ret = ret & "+"
                    Case Else
                        ' それ以外の ASCII 文字は、そのまま出力します。
                        ret = ret & Chr(b(i))
                    End Select
                Else
                    'コントロール文字か、DBCS の場合は、16 進形式に変換します。
                    If b(i) < &H20 Then
                        ret = ret & "%0" & Hex(b(i))
                    Else
                        ret = ret & "%" & Hex(b(i))
                    End If
                End If
            Next
            URLEncode = ret
        End Function
 


以下の内容の asp ファイルを Internet Information Service (IIS) の既定の Web サイトのルートに 
"Receiver.asp" というファイル名で保存します。 
        <%
        response.write("uid=" & Request("uid"))
        %>
 


作成した Visual Basic のプロジェクトを実行すると、イミディエイト ウィンドウに次の文字列が出力されます。 
        送信したデータ: uid=%8ER%93c+%91%BE%98Y
        受信したデータ: uid=山田 太郎
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ