<%
'**************************************'
' 作者: YuanFen (YuanFen@msn.com)
' 日期: 2003/09/22
' 更新: 2003/10/06
' 版本: 0.9
'**************************************'

'處理傳入字串的特殊字元, 使其符合 SQL Command
'回傳處理過的字串
Function AdjStr(str)
	Adjstr = "''"
	IF Not IsNULL(str) Then
		IF ""<>str THEN
			tmp = str
			'======= 處理規則加在這邊 =======
			tmp = Replace(tmp, "'", "''")
			tmp = Replace(tmp, vbCrLf, "<br>")
			'================================
			AdjStr = "'" & Trim(tmp) & "'"
		End IF
	END IF
End Function

'======================================================================================
'字串補齊函式

'有更好的方式可以使用
'以 LAddChr() 為例
'LAddChr = Left(<補齊字串>+Str,<長度>)

'於傳入字串(str)的右邊,用傳入字元(chr)補齊長度(lenth)
'回傳length長度的字串
'未考慮超過長度的狀況
Function RAddChr(str, chr, lenth)
	tmp = ""
	For ino = 1 To (lenth-StrLen(str))
		tmp = tmp & chr
	Next
	RAddChr = str & tmp
End Function

'於傳入字串(str)的左邊,用傳入字元(chr)補齊長度(lenth)
'回傳補齊長度的字串
'未考慮超過長度的狀況
Function LAddChr(str, chr, lenth)
	tmp = ""
	For ino = 1 To (lenth-Len(str))
		tmp = chr & tmp
	Next
	LAddChr = tmp & str
End Function

'=====================================================================================
'全形字函式

'回傳傳入字串(Str)的 bytes 數 (一個全形字為 2 bytes)
Function StrLen(Str)
	StrLen = 0
	For si=1 To Len(Str)
		If Asc(Mid(Str,si,1))>0 Then	'半形字
			StrLen = StrLen + 1
		Else	'全形字
			StrLen = StrLen + 2
		End If
	Next
End Function

'回傳傳入字串(Str)第 start 個字元開始,長度為 length bytes 的字串
'不知道 length 超過 StrLen 會怎麼樣
Function StrMid(Str, start, length)
	If ""=start Then start = 0
	'Response.Write "Str:"&Str&",s:"&start&",l:"&length&"<br>"&vbCrLf
	tmp = ""
	For mi=1 To Len(Str)
		tmp = tmp & LAddChr(Hex(Asc(Mid(Str,mi,1))),"0",2)	'如果16進位數小於等於F,前面補0
	Next
	For mi=start To start+length-1
		IF 127<("&H"&Mid(tmp,mi*2-1,2)) Then	'超過127即為全形字的第一個半形
			StrMid = StrMid & Chr("&H"&Mid(tmp,mi*2-1,4))	'加上&H代表16進位數
			mi = mi+1
		Else
			StrMid = StrMid & Chr("&H"&Mid(tmp,mi*2-1,2))
		End IF
		'Response.Write StrMid
	Next
	'Response.Write "<br>mi:"&mi&"<br>"&vbCrLf
End Function

'回傳傳入字串(Str)左邊第一個字元算起,長度為 length bytes 的字串
'不知道 length 超過 StrLen 會怎麼樣
Function StrLeft(Str, length)
	tmp = ""
	For li=1 To Len(Str)
		tmp = tmp & LAddChr(Hex(Asc(Mid(Str,li,1))),"0",2)
	Next
	For li=1 To length
		IF 127<("&H"&Mid(tmp,li*2-1,2)) Then
			StrLeft = StrLeft & Chr("&H"&Mid(tmp,li*2-1,4))
			li = li+1
		Else
			StrLeft = StrLeft & Chr("&H"&Mid(tmp,li*2-1,2))
		End IF
	Next
End Function

'回傳傳入字串(Str)右邊第一個字元算起,長度為 length bytes 的字串
'不知道 length 超過 StrLen 會怎麼樣
Function StrRight(Str, length)
	tmp = ""
	For ri=1 To Len(Str)
		tmp = tmp & LAddChr(Hex(Asc(Mid(Str,ri,1))),"0",2)
	Next
	For ri=(StrLen(Str)-length+1) To StrLen(Str)
		IF 127<("&H"&Mid(tmp,ri*2-1,2)) Then
			StrRight = StrRight & Chr("&H"&Mid(tmp,ri*2-1,4))
			ri = ri+1
		Else
			StrRight = StrRight & Chr("&H"&Mid(tmp,ri*2-1,2))
		End IF
	Next
End Function

'===================================================================================
%>