amk 发表于 2014-10-10 11:13:44

ASP通用函数库

<%
    '******************************
    '类名:
    '名称:通用库
    '日期:2008/10/28
    '作者:by xilou
    '网址:http://www.chinacms.org
    '描述:通用库
    '版权:转载请注名出处,作者
    '******************************
    '最后修改:20090108
    '修改次数:2
    '修改说明:
    '20090108 增加下列函数:
    '    A2U(),U2A(),UrlEncode(),UrlDecode(),GBToUTF8(),Bytes2Str(),Str2Bytes()
    '20090108 增加下列函数:
    '    AryToVbsString(arr)
    '目前版本:
    '******************************/

    '输出
    Sub Echo(str)
      Response.Write str
    End Sub

    '断点
    Sub Halt()
      Response.End()
    End Sub

    '输出并换行
    Sub Br(str)
      Echo str & "<br />" & vbcrlf
    End Sub

    '简化Request.Form()
    'f : 表单名称
    Function P(f)
      P = Replace(Request.Form(f), Chr(0), "")
    End Function

    '接收表单并替换单引号
    Function PR(f)
      Pr = Replace(Request.Form(f), Chr(0), "")
      Pr = Replace(Pr, "'", "''")
    End Function

    '简化Request.Querystring()
    'f : 表单名称
    Function G(f)
      G = Replace(Request.QueryString(f), Chr(0), "")
    End Function

    '接收url参数并替换单引号
    Function Gr(f)
      Gr = Replace(Request.QueryString(f), Chr(0), "")
      Gr = Replace(Gr, "'", "''")
    End Function

    '//构造()?:三目运算 by xilou www.chinacms.org
    'ifThen为true返回s1,为false返回s2
    Function IfThen(ifTrue, s1, s2)
      Dim t
      If ifTrue Then
            t = s1
      Else
            t = s2
      End If
      IfThen = t
    End Function

    '显示不同颜色的是和否
    Function IfThenFont(ifTrue, s1, s2)
      Dim str
      If ifTrue Then
            str = "<font color=""#006600"">" & s1 & "</font>"
      Else
            str = "<font color=""#FF0000"">" & s2 & "</font>"
      End If
      IfThenFont = str
    End Function

    '创建Dictionary对象
    Function NewHashTable()
      Set NewHashTable = Server.CreateObj("Scripting.Dictionary")
      NewHashTable.CompareMode = 1 '键值不区分大小写
    End Function

    '创建xmlHttp
    Function Newxmlhttp()
      Set NewXmlHttp = Server.createobject("MSXML2.XMLHTTP")
    End Function

    '创建XmlDom
    Function NewXmlDom()
    End Function

    '创建AdoStream
    Function NewAdoStream()
      Set NewAdoStream = Server.CreateObject("Adodb.Stream")
    End Function

    '创建一个1维数组
    '返回n个元素的空数组
    'n : 元素个数
    Function NewArray(n)
      Dim ary : ary = array()
      ReDim ary(n-1)
      NewArray = ary
    End Function

    '构造Try..Catch
    Sub Try()
      On Error Resume Next
    End Sub

    '构造Try..Catch
    'msg : 抛出的错误信息,如果为空则抛出Err.Description
    Sub Catch(msg)
      Dim html
      html = "<ul><li>$1</li></ul>"
      If Err Then
            If msg <> "" Then
                echo Replace(html, "$1", msg)
                Halt
            Else
                echo Replace(html, "$1", Err.Description)
                Halt
            End If
            Err.Clear
            Response.End()
      End If
    End Sub

    '--------------------------------数组操作开始
    '判断数组中是否存在某个值
    Function InArray(arr, s)
      If Not IsArray(arr) Then InArray = False : Exit Function
      Dim i
      For i = LBound(arr) To UBound(arr)
            If s = arr(i) Then InArray = True : Exit Function
      Next
      InArray = False
    End Function

    '用ary数组中的值分别替换str中的占位符
    '返回替换后的字符串
    'str:要替换的字符串,占位符分别为$0,$1,$2...
    'ary:用来替换的数组,每个值分别对应占位符中的$0,$1,$2...
    '如:ReplaceByAry("$0-$1-$2 $3:$4:$5",Array(y,m,d,h,i,s))
    Function ReplaceByAry(str,ary)
      Dim i, j, L1, L2 : j = 0
      If IsArray(ary) Then
            L1 = LBound(ary) : L2 = UBound(ary)
            For i = L1 To L2
                str = Replace(str, "$"&j, ary(i))
                j   = j+1
            Next
      End If
      ReplaceByAry = str
    End Function
    '--------------------------------数组操作结束

    '--------------------------------随机数操作开始
    '获取随机数
    'm-n的随机数字
    Function RndNumber(m,n)
      Randomize
      RndNumber = Int((n - m + 1) * Rnd + m)
    End Function

    '获取随机字符串
    'n : 产生的长度
    Function RndText(n)
      Dim str1, str2, i, x, L
      str1 = "NOPQRSTUVWXYZ012ABCDEFGHIJKLM3456abcdefghijklm789nopqrstuvwxyz"
      L    = Len(str1)
      Randomize
      For i = 1 To n
            x    = Int((L - 1 + 1) * Rnd + 1)
            str2 = str2 & Mid(str1,x,1)
      Next
      RndText = str2
    End Function

    '从字符串str中产生m至n个的随机字符串
    '如果str为空则默认从数字和字母中产生随机字符串
    'str : 要从该字符串中产生随机字符串
    'm,n : 产生n到m位
    Function RndByText(str, m, n)
      Dim i, k, str2, L, x
      If str = "" Then str = "NOPQRSTUVWXYZ012ABCDEFGHIJKLM3456abcdefghijklm789nopqrstuvwxyz"
      L = Len(str)
      If n = m Then
            k = n
      Else
            Randomize
            k = Int((n - m + 1) * Rnd + m)
      End If
      Randomize
      For i = 1 To k
            x    = Int((L - 1 + 1) * Rnd + 1)
            str2 = str2 & Mid(str, x, 1)
      Next
      RndByText = str2
    End Function

    '日期时间组成随机数
    '返回当前时间的数字组合
    Function RndByDateTime()
      Dim dt : dt= Now()
      RndByDateTime = Year(dt) & Month(dt) & Day(dt) & Hour(dt) & Minute(dt) & Second(dt)
    End Function
    '--------------------------------随机数操作结束

    '--------------------------------字符串操作开始
    '判断一字符串str2在另一个字符串str1中出现的次数
    '返回次数,没有则返回0
    'str1 :接受搜索的字符串表达式
    'str2 :要搜索的字符串表达式
    'start:要搜索的开始位置,为空表示默认从1开始搜索
    Function InStrTimes(str1, str2, start)
      Dim a,c
      If start = "" Then start = 1
      c = 0
      a = InStr(start, str1, str2)
      Do While a > 0
            c = c + 1
            a = InStr(a+1, str1, str2)
      Loop
      InStrTimes = c
    End Function

    '字符串连接
    '无返回
    'strResult : 连接后保存的字符
    'str       : 要连接的字符
    'partition : 连接字符间的分割符号
    Sub JoinStr(byref strResult,str,partition)
      If strResult <> "" Then
            strResult = strResult & partition & str
      Else
            strResult = str
      End If
    End Sub

    '计算字符串的字节长度,一个汉字=2字节
    Function StrLen(str)
      If isNull(str) or Str = "" Then
            StrLen = 0
            Exit Function
      End If
      Dim WINNT_CHINESE
      WINNT_CHINESE = (len("例子")=2)
      If WINNT_CHINESE Then
            Dim l,t,c
            Dim i
            l = len(str)
            t = l
            For i = 1 To l
                c = asc(mid(str,i,1))
                If c<0 Then c = c + 65536
                If c>255 Then t = t + 1
            Next
            StrLen = t
      Else
            StrLen = len(str)
      End If
    End Function

    '截取字符串
    ' str    : 要截取的字符串
    ' strlen : 要截取的长度
    ' addStr : 超过长度的用这个代替,如:...
    Function CutStr(str, strlen, addStr)
      Dim i,l, t, c      
      If Is_Empty(str) Then CutStr = "" : Exit Function
      l = len(str) : t = 0
      For i = 1 To l
            c = Abs(Asc(Mid(str,i,1)))
            If c > 255 Then
                t = t+2
            Else
                t = t+1
            End If
            If t > strlen Then
                CutStr = left(str, i) & addStr
                Exit For
            Else
                CutStr = str
            End If
      Next
    End Function

    '全角转换成半角
    Function SBCcaseConvert(str)
      Dim b, c, i
      b = "1,2,3,4,5,6,7,8,9,0," _
      &"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
      c = "1,2,3,4,5,6,7,8,9,0," _
      &"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
      b = split(b,",")
      c = split(c,",")
      For i = 0 To Ubound(b)
            If instr(str,b(i)) > 0 Then
                str = Replace(str, b(i), c(i))
            End If
      Next
      SBCcaseConvert = str
    End Function

    '与javascript中的escape()等效
    Function VbsEscape(str)
      dim i,s,c,a
      s = ""
      For i=1 to Len(str)
            c = Mid(str,i,1)
            a = ASCW(c)
            If (a>=48 and a<=57) or (a>=65 and a<=90) or (a>=97 and a<=122) Then
                s = s & c
            ElseIf InStr("@*_+-./",c) > 0 Then
                s = s & c
            ElseIf a>0 and a<16 Then
                s = s & "%0" & Hex(a)
            ElseIf a>=16 and a<256 Then
                s = s & "%" & Hex(a)
            Else
                s = s & "%u" & Hex(a)
            End If
      Next
      VbsEscape = s
    End Function

    '对Javascript中使用escape()编码过的数据进行解码,Ajax调用时用
    Function VbsUnEscape(str)
      Dim x
      x = InStr(str,"%")
      Do While x > 0
            VbsUnEscape = VbsUnEscape & Mid(str,1,x-1)
            If LCase(Mid(str,x+1,1)) = "u" Then
                VbsUnEscape = VbsUnEscape & ChrW(CLng("&H"&Mid(str,x+2,4)))
                str = Mid(str,x+6)
            Else
                VbsUnEscape = VbsUnEscape & Chr(CLng("&H"&Mid(str,x+1,2)))
                str = Mid(str,x+3)
            End If
            x = InStr(str,"%")
      Loop
      VbsUnEscape = VbsUnEscape & str
    End Function
   
    '将ascii字符转为unicode编码形式
    Function A2U(str)
      Dim i,L,uText
      L = Len(str)
      For i = 1 To L
            uText = uText & "&#" & AscW(Mid(str,i,1)) & ";"
      Next
      A2U = uText
    End Function

    '将unicode编码转为ascii
    'str : 要转码的字符串,必须全部都是unicode字符,否则会出错
    Function U2A(str)
      Dim ary,i,L,newStr
      ary = Split(str,";")
      L   = UBound(ary)
      For i = 0 To L - 1
            newStr = newStr & ChrW(Replace(ary(i),"&#",""))
      Next
      U2A = newStr
    End Function
   
    'url编码
    Function UrlEncode(str)
      UrlEncode = Server.UrlEncode(str)
    End Function

    'url解码
    Function UrlDecode(str)
      Dim newstr, havechar, lastchar, i, char_c, next_1_c, next_1_Num
      newstr   = ""
      havechar = false
      lastchar = ""
      For i = 1 To Len(str)
            char_c = Mid(str,i,1)
            If char_c = "+" Then
                newstr = newstr & " "
            ElseIf char_c = "%" Then
                next_1_c = Mid(str, i+1, 2)
                next_1_num = Cint("&H" & next_1_c)
                If havechar Then
                  havechar = false
                  newstr = newstr & Chr(CInt("&H" & lastchar & next_1_c))
                Else
                  If Abs(next_1_num) <= 127 Then
                        newstr = newstr & Chr(next_1_num)
                  Else
                        havechar = true
                        lastchar = next_1_c
                  End If
                End If
                i = i + 2
            Else
                newstr = newstr & char_c
            End If
      Next
      UrlDecode = newstr
    End Function
   
    'GB转UTF8--将GB编码文字转换为UTF8编码文字
    Function GBToUTF8(gbStr)
      Dim wch, uch, szRet,szInput
      Dim x
      Dim nAsc, nAsc2, nAsc3
      szInput = gbStr
      '如果输入参数为空,则退出函数
      If szInput = "" Then
            toUTF8 = szInput
            Exit Function
      End If
      '开始转换
         For x = 1 To Len(szInput)
            '利用mid函数分拆GB编码文字
            wch = Mid(szInput, x, 1)
            '利用ascW函数返回每一个GB编码文字的Unicode字符代码
            '注:asc函数返回的是ANSI 字符代码,注意区别
            nAsc = AscW(wch)
            If nAsc < 0 Then nAsc = nAsc + 65536

            If (nAsc And &HFF80) = 0 Then
                szRet = szRet & wch
            Else
                If (nAsc And &HF000) = 0 Then
                  uch = "%" & Hex(((nAsc \ 2 ^ 6)) or &HC0) & Hex(nAsc And &H3F or &H80)
                  szRet = szRet & uch
                Else
                   'GB编码文字的Unicode字符代码在0800 - FFFF之间采用三字节模版
                  uch = "%" & Hex((nAsc \ 2 ^ 12) or &HE0) & "%" & _
                              Hex((nAsc \ 2 ^ 6) And &H3F or &H80) & "%" & _
                              Hex(nAsc And &H3F or &H80)
                  szRet = szRet & uch
                End If
            End If
      Next
      GBToUTF8 = szRet
    End Function
   
    'Byte流到Char流的转换
    Function Bytes2Str(vin,charset)
      Dim ms,strRet
      Set ms = Server.CreateObject("ADODB.Stream")    '建立流对象
      ms.Type = 1             ' Binary
      ms.Open                  
      ms.Write vin            '把vin写入流对象中
      
      ms.Position = 0         '设置流对象的起始位置是0 以设置Charset属性
      ms.Type = 2            'Text
      ms.Charset = charset    '设置流对象的编码方式为 charset

      strRet = ms.ReadText    '取字符流
      ms.close                '关闭流对象
      Set ms = nothing
      Bytes2Str = strRet
    End Function
   
    'Char流到Byte流的转换
    Function Str2Bytes(str,charset)
      Dim ms,strRet
      Set ms = CreateObject("ADODB.Stream")    '建立流对象
      ms.Type = 2             ' Text
      ms.Charset = charset    '设置流对象的编码方式为 charset
      ms.Open                  
      ms.WriteText str            '把str写入流对象中
      
      ms.Position = 0         '设置流对象的起始位置是0 以设置Charset属性
      ms.Type = 1            'Binary

      vout = ms.Read(ms.Size)    '取字符流
      ms.close                '关闭流对象
      Set ms = nothing
      Str2Bytes = vout
    End Function
    '--------------------------------字符串操作结束

    '--------------------------------时间日期操作开始
    '根据年份和月份获得相应的月份天数
    '返回天数
    'y : 年份,如:2008
    'm : 月份,如:3
    Function GetDayCount(y,m)
      Dim c
      Select Case m
      Case 1, 3, 5, 7, 8, 10, 12
            c=31
      Case 2
            If IsDate(y&"-"&m&"-"&"29") Then
                c = 29
            Else
                c = 28
            End If
      Case Else
            c = 30
      End Select
      GetDayCount = c
    End Function

    '判断一个日期时间是否在某段时间之间,包括比较的两头时间
    Function IsBetweenTime(fromTime,toTime,strTime)
      If DateDiff("s",fromTime,strTime) >= 0 And DateDiff("s",toTime,strTime) <= 0 Then
            IsBetweenTime = True
      Else
            IsBetweenTime = False
      End If
    End Function
    '--------------------------------时间日期操作结束

    '--------------------------------安全加密相关操作开始
   
    '--------------------------------安全加密相关操作结束

    '--------------------------------数据合法性验证操作开始
    '通过正则检测字符串,返回true|false
    Function RegExpTest(strPatrn,strText)
      Dim objRegExp, matches
      Set objRegExp = New RegExp
      objRegExp.Pattern    = strPatrn
      objRegExp.IgnoreCase = False
      objRegExp.Global   = True
      RegExpTest    = objRegExp.Test(strText)
      'Set matches   = objRegExp.Execute(strText)
      Set objRegExp = nothing
    End Function

    '是否是正整数
    Function IsPint(str)
      IsPint = RegExpTest("^{1}\d*$", str)
    End Function

    '是否是0或正整数
    Function IsInt(str)
      IsInt = RegExpTest("^0|({1}\d*)$", str)
    End Function
   
    'Email
    Function IsEmail(str)
      Dim patrn
      patrn = "^\w+((-\w+)|(\.\w+))*\@+((\.|-)+)*\.+$"
      IsEmail = RegExpTest(patrn,str)
    End Function
   
    '手机
    Function IsMobile(str)
      Dim patrn
      patrn = "^(130|131|132|133|153|134|135|136|137|138|139|158|159){1}\d{8}$"
      IsMobile = RegExpTest(patrn,str)
    End Function
   
    'QQ
    Function IsQQ(str)
      Dim patrn
      patrn = "^\d{4,8}$"
      IsQQ = RegExpTest(patrn,str)
    End Function
   
    '身份证
    Function IsIdCard(e)
      Dim arrVerifyCode,Wi,Checker
      arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")
      Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")
      Checker = Split("1,9,8,7,6,5,4,3,2,1,1", ",")
      
      If Len(e) < 15 or Len(e) = 16 or Len(e) = 17 or Len(e) > 18 Then
            IsIdCard = False
            Exit Function
      End If
      
      Dim Ai
      If Len(e) = 18 Then
            Ai = Mid(e, 1, 17)
      ElseIf Len(e) = 15 Then
            Ai = e
            Ai = Left(Ai, 6) & "19" & Mid(Ai, 7, 9)
      End If
      If Not IsNumeric(Ai) Then
            IsIdCard= False
            Exit Function
      End If
      Dim strYear, strMonth, strDay, BirthDay
      strYear = CInt(Mid(Ai, 7, 4))
      strMonth = CInt(Mid(Ai, 11, 2))
      strDay = CInt(Mid(Ai, 13, 2))
      BirthDay = Trim(strYear) + "-" + Trim(strMonth) + "-" + Trim(strDay)
      If IsDate(BirthDay) Then
            If DateDiff("yyyy",Now,BirthDay)<-140 or cdate(BirthDay)>date() Then
                IsIdCard= False
                Exit Function
            End If
            If strMonth > 12 or strDay > 31 Then
                IsIdCard= False
                Exit Function
            End If
      Else
            IsIdCard= False
            Exit Function
      End If
      Dim i, TotalmulAiWi
      For i = 0 To 16
            TotalmulAiWi = TotalmulAiWi + CInt(Mid(Ai, i + 1, 1)) * Wi(i)
      Next
      Dim modValue
      modValue = TotalmulAiWi Mod 11
      Dim strVerifyCode
      strVerifyCode = arrVerifyCode(modValue)
      Ai = Ai & strVerifyCode
      IsIdCard = Ai
      
      If Len(e) = 18 And e <> Ai Then
            IsIdCard= False
            Exit Function
      End If
      IsIdCard=True
    End Function
   
    '邮政编码
    Function IsZipCode(str)
      Dim patrn
      patrn = "^\d{2,5}$"
      IsZipCode = RegExpTest(patrn,str)
    End Function
   
    '是否为空,包括IsEmpty(),IsNull(),""的功能
    Function Is_Empty(str)
      If IsNull(str) or IsEmpty(str) or str="" Then
            Is_Empty=True
      Else
            Is_Empty=False
      End If
    End Function
    '--------------------------------数据合法性验证操作结束

    '--------------------------------文件操作开始
    '获取文件后缀,如jpg
    Function GetFileExt(f)
      GetFileExt = Lcase(Mid(f,InStrRev(f,".") + 1))
    End Function
   
    '生成文件夹
    'path : 要生成的文件夹路径,用相对路径
    Sub CFolder(path)
      Dim fso
      Set fso = Server.CreateObject("Scripting.FileSystemObject")
      If Not fso.FolderExists(path) Then
            fso.CreateFolder(path)
      End If
      Set fso = Nothing
    End Sub

    '删除文件夹
    'path : 文件夹路径,用相对路径
    Sub DFolder(path)
      Dim fso
      Set fso = Server.CreateObject("Scripting.FileSystemObject")
      If fso.FolderExists(path) Then
            fso.DeleteFolder path,true
      Else
            echo "路径不存在:" & path
      End If
      Set fso = Nothing
    End Sub

    '生成文件
    'path   : 生成文件路径,包括名称
    'strText: 文件内容
    Sub CFile(path,strText)
      Dim f,fso
      Set fso = Server.CreateObject("Scripting.FileSystemObject")
      Set f = fso.CreateTextFile(path)
      f.Write strText
      Set f = Nothing
      Set fso = Nothing
    End Sub

    '删除文件
    'path   : 文件路径,包括名称
    Sub DFile(path)
      Dim fso
      Set fso = Server.CreateObject("Scripting.FileSystemObject")
      If fso.FileExists(path) Then
            Fso.DeleteFile(path)
      End If
      Set fso = Nothing
    End Sub

    '采集
    Function GetHTTPPage(url)
      ' Http.setTimeouts 10000,10000,10000,10000
      'On Error Resume Next
      Dim Http
      Set Http = Server.createobject("MSXML2.XMLHTTP")
      Http.open "GET",url,false
      Http.send()
      If Http.Status <> 200 Then
            Exit Function
      End If
      'If Err Then Response.Write url : Response.End()
      GetHTTPPage = bytesToBSTR(Http.ResponseBody,"GB2312")
      'Http.Close()
      'if err.number<>0 then err.Clear
    End Function

    '编码转换
    Function BytesToBstr(body,Cset)
      Dim StreamObj
      Set StreamObj = Server.CreateObject("Adodb.Stream")
      StreamObj.Type = 1
      StreamObj.Mode = 3
      StreamObj.Open
      StreamObj.Write body
      StreamObj.Position = 0
      StreamObj.Type   = 2
      StreamObj.Charset= Cset
      BytesToBstr      = StreamObj.ReadText
      StreamObj.Close
    End Function
    '--------------------------------文件操作结束

    '--------------------------------其他操作开始
    '显示信息
    'message : 要显示的信息
    'url   : 要跳转的URL
    'typeNum : 显示方式,1弹出信息,回退到上一页;2弹出信息,转到url处
    Sub ShowMsg(message,url,typeNum)
      message = replace(message,"'","\'")
      Select Case TypeNum
      Case 1
         echo ("<script language=javascript>alert('" & message & "');history.go(-1)</script>")
      Case 2
         echo ("<script language=javascript>alert('" & message & "');location='" & Url &"'</script>")
      End Select
    End Sub

    '显示option列表并定位,by xilou www.chinacms.org
    'textArr: 文本数组
    'valueArr : 值数组
    'curValue : 当前选定值
    Function ShowOpList(textArr, valueArr, curValue)
      Dim str, style, i
      style = "style=""background-color:#FFCCCC"""
      str   = ""
      If IsNull(curValue) Then curValue = ""
      For I = LBound(textArr) To UBound(valueArr)
            If Cstr(valueArr(I)) = Cstr(curValue) Then
                str = str&"<option value="""&valueArr(I)&""" selected=""selected"" "&style&" >"&textArr(I)&"</option>"&vbcrlf
            Else
                str = str&"<option value="""&valueArr(I)&""" >"&textArr(I)&"</option>"&vbcrlf
            End If
      Next
      ShowOpList = str
    End Function

    '多选列表
    '注意:要使用到InArray()函数
    'textArr: 文本数组
    'valueArr : 值数组
    'curValue : 当前选定值数组
    Function ShowMultiOpList(textArr,valueArr,curValueArr)
      Dim style, str, isCurr, I
      style = "style=""background-color:#FFCCCC"""
      str   = "" : isCurr = False
      If IsNull(curValue) Then curValue = ""
      For I = LBound(textArr) To UBound(valueArr)
            If InArray(curValueArr, valueArr(I)) Then
                str = str&"<option value="""&valueArr(I)&""" selected=""selected"" "&style&" >"&textArr(I)&"</option>"&vbcrlf
            Else
                str = str&"<option value="""&valueArr(I)&""" >"&textArr(I)&"</option>"&vbcrlf
            End If
      Next
      ShowMultiOpList = str
    End Function
   
    Function GetIP()
      Dim strIPAddr,actforip
      If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" or InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
            strIPAddr = Request.ServerVariables("REMOTE_ADDR")
      ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
            strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
      ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
            strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
      Else
            strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
      End If
      GetIP = strIPAddr
    End Function
   
    '将数组转化为dictionary对象存储
    'hashObj : dictionary对象
    'ary   : 数组,格式必须为以下两种之一,第一种只能存储字符串值
    '      : array("Id:12","UserName:xilou","Sex:1"),即array("key:value",...)格式
    '      : array(array("Id","12"),array("UserName","xilou"),array("Sex","1"))
    '返回dictionary对象
    'www.chinacms.org
    Sub AryAddToHashTable(ByRef hashObj,ary)
      Dim str,ht,i,k,v,pos
      For i = 0 To UBound(ary)
            If IsArray(ary(i)) Then
                If IsObject(ary(i)(0)) Then
                  Response.Write "Error:AryToHashTable(ary),键值不可以是一个对象类型,"
                  Response.Write "当前ary("& i &")(0)值类型为:" & TypeName(ary(i)(0))
                  Response.End()
                End If
                If IsObject(ary(i)(1)) Then '如果值是一个对象
                  Set hashObj(ary(i)(0)) = ary(i)(1)
                Else
                  hashObj(ary(i)(0)) = ary(i)(1)
                End If
            Else
                str = ary(i) & ""
                pos = InStr(str,":")
                'www.chinacms.org
                If pos < 1 Then
                  Response.Write "Error:AryToHashTable(ary),"":""不存在"
                  Response.Write ",发生在:" & ary(i)
                  Response.End()
                End If
                If pos = 1 Then
                  Response.Write "Error:AryToHashTable(ary),键值不存在"
                  Response.Write ",发生在:" & ary(i)
                  Response.End()
                End If
                k = Left(str,pos-1)
                v = Mid(str,pos+1)
                hashObj(k) = v
            End If
      Next
    End Sub

    '将数组转化为dictionary对象存储
    'ary : 数组,格式必须为以下两种之一,第一种只能存储字符串值
    '    : array("Id:12","UserName:xilou","Sex:1"),即array("key:value",...)格式
    '    : array(array("Id","12"),array("UserName","xilou"),array("Sex","1"))
    '返回dictionary对象
    Function AryToHashTable(ary)
      Dim str,ht,i,k,v,pos
      Set ht = Server.CreateObject("Scripting.Dictionary")
      ht.CompareMode = 1
      AryAddToHashTable ht , ary
      Set AryToHashTable = ht
    End Function

    '将array转为字符串,相当于序列化array,只可允许的格式为:
    'array("p1:v1","p2:v2",array("p3",true))
    '返回字符串
    Function AryToVbsString(arr)
      Dim str,i,c
      If Not IsArray(arr) Then Response.Write "Error:AryToString(arr)错误,参数arr不是数组"
      c = UBound(arr)
      For i = 0 To c
            If IsArray(arr(i)) Then
                Select Case LCase(TypeName(arr(i)(1)))
                  Case "date","string","empty"
                        str = str & ",array(""" & arr(i)(0) & ""","""& arr(i)(1) &""")"
                  Case "integer","long","single","double","currency","decimal","boolean"
                        str = str & ",array(""" & arr(i)(0) & ""","& arr(i)(1) &")"
                  Case "null"
                        str = str & ",array(""" & arr(i)(0) & """,null)"
                  Case Else
                        Response.Write "Error:AryToVbsString(arr),参数包含非法数据,索引i="&i&",键值为:"&arr(i)(0)
                        Response.End()
                End Select
            Else
                str = str & ",""" & arr(i) & """"
            End If
      Next
      If str <> "" Then str = Mid(str, 2, Len(str) - 1)
      str = "array(" & str & ")"
      AryToVbsString = str
    End Function
    '--------------------------------其他操作结束
%>
页: [1]
查看完整版本: ASP通用函数库