ASP读取Request.QueryString编码的函数代码

  1. 支持参数纯汉字 ?a=深山老熊

  2. 支持参数gb2312 Urlencode编码: ?a=%C9%EE%C9%BD%C0%CF%D0%DC

  3. 支持参数UTF-8 Urlencode编码: ?a=%E6%B7%B1%E5%B1%B1%E8%80%81%E7%86%8A

  

复制代码 代码如下:

  <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

  <%

  Option Explicit

  Const YXCMS_CHARSET = "UTF-8"

  Const YXCMS_CODEPAGE = 65001

  Response.CharSet = "UTF-8"

  Session.CodePage = 65001

  '测试URL

  '?n1=深山老熊&n2=%C9%EE%C9%BD%C0%CF%D0%DC&n3=%E6%B7%B1%E5%B1%B1%E8%80%81%E7%86%8A

  '深山老熊

  'GBK : %C9%EE%C9%BD%C0%CF%D0%DC

  'UTF-8 : %E6%B7%B1%E5%B1%B1%E8%80%81%E7%86%8A

  Dim URI,key

  Set URI = new Cls_URI

  '输出所有参数测试

  For Each key In URI.QueryString

  Response.Write "<span style='color:red'>" & key & " : </span>" & URI.Get(key) & "<hr/>"

  Next

  '取单个值

  'URI.Get("名称")

  '--------------------------------------------

  'ASP UTF-8编码下通吃 GBK UTF-8编码

  '作者: 深山老熊 QQ:81090

  '--------------------------------------------

  Class Cls_URI

  Private o_item,o_regx

  Private url_query

  Private Sub Class_Initialize

  Set o_item = CreateObject("Scripting.Dictionary")

  o_item.CompareMode = 1

  Set o_regx = New Regexp

  o_regx.Pattern = "^(?:[\x00-\x7f]|[\xfc-\xff][\x80-\xbf]{5}|[\xf8-\xfb][\x80-\xbf]{4}|[\xf0-\xf7][\x80-\xbf]{3}|[\xe0-\xef][\x80-\xbf]{2}|[\xc0-\xdf][\x80-\xbf])+$"

  Session.CodePage = 936

  url_query = Request.ServerVariables("QUERY_STRING")

  Session.CodePage = 65001

  '根据QUERY_STRING字符串,生成模拟QueryString值

  Dim i,a,b,c,n,v

  a = Split(url_query,"&") : c = UBound(a)

  For i = 0 To c

  b = Split(a(i),"=",2)

  n = Trim(b(0) & "")

  If UBound(b) < 1 Then

  v = ""

  Else

  v = b(1)

  If InStr(v,"%") > 0 Then v = URLDecode(v)

  End If

  If n <> "" Then

  o_item(n) = v

  End If

  Next

  Set o_regx = Nothing

  End Sub

  Private Sub Class_Terminate

  Set o_item = Nothing

  End Sub

  '模拟 Request.QueryString

  Public Function QueryString()

  Set QueryString = o_item

  End Function

  '模拟 Request.QueryString(n)

  Public Function [GET](n)

  If o_item.Exists(n) Then

  [GET] = o_item.Item(n)

  Else

  [GET] = ""

  End If

  End Function

  '编码格式化

  Private Function URLDecode(ByVal s)

  Dim sm,cs,r,o_regex

  If Trim(s & "") = "" Then

  URLDecode = s : Exit Function

  End If

  s = unescape(s)

  If o_regx.Test(s) Then

  cs = "UTF-8"

  Else

  cs = "GBK"

  End If

  Set sm = CreateObject("Adodb.Stream")

  With sm

  .Type = 2

  .Mode = 3

  .Open

  .CharSet = "ISO-8859-1"

  .WriteText s

  .Position = 0

  .CharSet = cs

  URLDecode = .ReadText(-1)

  .Close

  End With

  Set sm = Nothing

  End Function

  End Class

  %>