木子屋 Dnawo's BLOG

ASP的URLDecode函数

👤 dnawo 📅 2008-09-11 👁 5032 👍 0 💬 0 🔄 本站原创
我们知道,ASP的Server对象有个URLEncode方法可以对地址进行编码,但却没有相应的解码函数,下边的这个函数可以实现对URLEncode的解码:

'================================================
'函数名:URLDecode
'作  用:URL解码
'================================================
Function URLDecode(ByVal urlcode)
 
	Dim start,final,length,char,i,butf8,pass
	Dim leftstr,rightstr,finalstr
	Dim b0,b1,bx,blength,position,u,utf8
	On Error Resume Next

	b0 = Array(192,224,240,248,252,254)
	urlcode = Replace(urlcode,"+"," ")
	pass = 0
	utf8 = -1

	length = Len(urlcode) : start = InStr(urlcode,"%") : final = InStrRev(urlcode,"%")
	If start = 0 or length < 3 Then URLDecode = urlcode : Exit Function
	leftstr = Left(urlcode,start - 1) : rightstr = Right(urlcode,length - 2 - final)

	For i = start To final
		char = Mid(urlcode,i,1)
		If char = "%" Then
			bx = URLDecode_Hex(Mid(urlcode,i + 1,2))
			If bx > 31 And bx < 128 Then
				i = i + 2
				finalstr = finalstr & ChrW(bx)
			ElseIf bx > 127 Then
				i = i + 2
				If utf8 < 0 Then
					butf8 = 1 : blength = -1 : b1 = bx
					For position = 4 To 0 Step -1
						If b1 >= b0(position) And b1 < b0(position + 1) Then
							blength = position
							Exit For
						End If
					Next
					If blength > -1 Then
						For position = 0 To blength
							b1 = URLDecode_Hex(Mid(urlcode,i + position * 3 + 2,2))
							If b1 < 128 or b1 > 191 Then butf8 = 0 : Exit For
						Next
					Else
						butf8 = 0
					End If
					If butf8 = 1 And blength = 0 Then butf8 = -2
					If butf8 > -1 And utf8 = -2 Then i = start - 1 : finalstr = "" : pass = 1
					utf8 = butf8
				End If
				If pass = 0 Then
					If utf8 = 1 Then
						b1 = bx : u = 0 : blength = -1
						For position = 4 To 0 Step -1
							If b1 >= b0(position) And b1 < b0(position + 1) Then
								blength = position
								b1 = (b1 xOr b0(position)) * 64 ^ (position + 1)
								Exit For
							End If
						Next
						If blength > -1 Then
							For position = 0 To blength
								bx = URLDecode_Hex(Mid(urlcode,i + 2,2)) : i = i + 3
								If bx < 128 or bx > 191 Then u = 0 : Exit For
								u = u + (bx And 63) * 64 ^ (blength - position)
							Next
							If u > 0 Then finalstr = finalstr & ChrW(b1 + u)
						End If
					Else
						b1 = bx * &h100 : u = 0
						bx = URLDecode_Hex(Mid(urlcode,i + 2,2))
						If bx > 0 Then
							u = b1 + bx
							i = i + 3
						Else
							If Left(urlcode,1) = "%" Then
								u = b1 + Asc(Mid(urlcode,i + 3,1))
								i = i + 2
							Else
								u = b1 + Asc(Mid(urlcode,i + 1,1))
								i = i + 1
							End If
						End If
						finalstr = finalstr & Chr(u)
					End If
				Else
					pass = 0
				End If
			End If
		Else
			finalstr = finalstr & char
		End If
	Next
	URLDecode = leftstr & finalstr & rightstr
 
End Function

Function URLDecode_Hex(ByVal h)
	On Error Resume Next
	h = "&h" & Trim(h) : URLDecode_Hex = -1
	If Len(h) <> 4 Then Exit Function
	If isNumeric(h) Then URLDecode_Hex = cInt(h)
End Function

评论(0)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 MDI开发实例 下一篇 → FTP四种连接方式PORT、PASV、EPRT、EPSV的区别