|
概要
この資料では、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=山田 太郎
| |