2009년 6월 23일 화요일

urldecode

Function urldecode(str)
 Dim res, reg, tmp
 Dim i

 if IsNull(str) then
  str = ""
 else 
  Set reg = New RegExp
  reg.IgnoreCase = True
  reg.Pattern = "^%[0-9a-f][0-9a-f]$"
  str = Replace(str, "+", " ")
  res = ""

  For i = 1 To Len(str)
   tmp = Mid(str, i, 3)
   
   If reg.Test(tmp) Then
    If CInt("&H" & Mid(str, i + 1, 2)) < 128 Then
     res = res & Chr(CInt("&H" & Mid(str, i + 1, 2)))
     i = i + 2
    Elseif mid(str, i+3, 1) ="%" then
     res = res & Chr(CInt("&H" & Mid(str, i + 1, 2) & Mid(str, i + 4, 2)))
     i = i + 5
    Else
     res = res & Chr(CInt("&H" & Mid(str, i + 1, 2) & "00") + asc(mid(str,i+3,1)))
     i = i + 3
     ' 이부분이 중요하다.
     ' 기존 urldecode함수가 몇 몇 글자들에서 에러를 내는 이유는
     ' 3바이트로 인코딩 되어있는 부분이 있기 때문.
     ' ascII로 변형되어 인코딩 된 부분이 존재한다.
    End If
   Else
    res = res & Mid(str, i, 1)
   End If
  Next
 End If
 urldecode = res
End Function

댓글 없음:

댓글 쓰기