2015年02月16日


URLEncode ( UTF-8 の文字列として全ての文字をパーセントエンコーディングします )

VBScript の内部コードから意図的に UTF-8 のキャラクタセットでテキストを書き込んで、バイナリストリームにコピーして、UTF-8 としてのバイトデータを1バイトづつ読み込んで『パーセントエンコーディング』で表現した文字列に変換しています。

※ UTF-8 として処理した場合、先頭3バイトは BOM なので取り除いています。
REM ***********************************************
REM UTF-8 のバイナリデータを作成して URLエンコード
REM ※ 全ての文字をパーセントエンコーディングします
REM ***********************************************
Function URLEncode(s1,s2, str)

	s1.Open
	s1.Charset = "utf-8"
	REM shift_jis で入力文字を書き込む
	s1.WriteText str
	REM コピーの為にデータポインタを先頭にセット
	s1.Position = 0

	REM バイナリで開く
	s2.Open
 	s2.Type = 1

	REM テキストをバイナリに変換
	s1.CopyTo s2
	s1.Close

	REM 読み込みの為にデータポインタを先頭にセット
	s2.Position = 0

	Dim Buffer : Buffer = ""
	REM BOMを取り去る
	s2.Read(3)
	Do while not s2.EOS
		LineBuffer = s2.Read(16)
 
		For i = 1 to LenB( LineBuffer )
			CWork = MidB(LineBuffer,i,1)
			Cwork = AscB(Cwork)
			Cwork = Hex(Cwork)
			Cwork = Ucase(Cwork)
			if Len(Cwork) <> 1 then
				Buffer = Buffer & "%" & Cwork
			else
				Buffer = Buffer & "%0" & Cwork
			end if
		Next
 
	Loop

	s2.Close

	URLEncode = Buffer

End Function

▼ 呼び出しサンプル
<JOB>
<OBJECT id="s1" progid="ADODB.Stream" />
<OBJECT id="s2" progid="ADODB.Stream" />

<SCRIPT language="VBScript" src="http://winofsql.jp/VBScript/urlencode.vbs"></SCRIPT>

<SCRIPT language="VBScript">

str = "あいうえお"

Wscript.Echo URLEncode(s1,s2, str)

</SCRIPT>
</JOB>

REM を使ったり、条件式の = を使わずに、<> を使っているのは、ExecuteGlobal を使って動的に関数登録する為です。
VBScript では、x = y の解釈が 2 とおりあります。1 つ目は代入ステートメントとして解釈され、y の値が x に代入されます。2 つ目は x と y の値が等しいかどうかをテストする式として解釈されます。等しい場合、result は True です。それ以外の場合、result は False です。ExecuteGlobal ステートメントは常に 1 つ目の解釈を適用し、Eval メソッドは常に 2 つ目の解釈を適用します。
【関数の最新記事】
posted by at 17:47 | Comment(0) | 関数 | このブログの読者になる | 更新情報をチェックする


この記事へのコメント
コメントを書く
お名前:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。