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
%>

(0)

相关推荐

  • ASP.NET从客户端中检测到有潜在危险的request.form值的3种解决方法

    当页面编辑或运行提交时,出现"从客户端中检测到有潜在危险的request.form值"问题,该怎么办呢?如下图所示: 下面博主汇总出现这种错误的几种解决方法: 问题原因:由于在asp.net中,Request提交时出现有html代码或javascript等字符串时,程序系统会认为其具有潜在危险的值.环境配置会报出"从客户端 中检测到有潜在危险的Request.Form值"这样的Error. 1.当前提交页面,添加代码 打开当前.aspx页面,页头加上代码:valid

  • 循环取值Request.QueryString的用法

    当页面上的FORM以GET方式向页面发送请[/url]求数据(如数据含有不安全字符,则浏览器先将其转换成16进制的字符再传送,如空格被转成%20)时,WEB   SERVER   将请求数据放入一名为QUERY_STRING的环境变量中,QueryString   方法是从这一环境变量中取出相应的值,并将被转成16进制的字符还原(如   %20   被还原成空格). 如表单上有一   name为username的文本框及一   name为password的文本框   ,   当表单提交时,会产生

  • asp.net中Request.QueryString与Request.Param的区别分析

    request.params其实是一个集合,它依次包括request.querystring.request.form.request.cookies和request.servervariables. 如果要在两个页面传递数据的话,只能用request.querystring.request.form.request.cookies Request.Params 是在 QueryString.Form.Server Variable 以及 Cookies 找数据, 他首先在 QueryStrin

  • asp.net 从客户端中检测到有潜在危险的 Request.Form 值错误解

    从客户端(ftbContent="<P><A href="http://l...")中检测到有潜在危险的 Request.Form 值. 说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止.该值可能指示危及应用程序安全的尝试,如跨站点的脚本攻击.通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证.但是,在这种情况下,强烈建议应用程序显式检查所有输入. 异常详细信息: System.Web

  • 从客户端检测到有潜在危险的Request.Form值的asp.net代码

    1.web.config文档<system.web>后面加入这一句: 复制代码 代码如下: <pages validaterequest="false"/> 示例: XML/HTML 复制代码 代码如下: <?xml version="1.0" encoding="gb2312" ?> <configuration> <system.web> <pages validaterequ

  • asp.net下Request.QueryString取不到值的解决方法

    今天做新的ppc weather服务器的时候竟然碰到QueryString取不到值的问题 查了下网上,应该是编码的问题,tq121用的是utf-8,而我希望用gb2132输入~ 因此,改一下~哈哈 打开web.config把 <!-- <globalization              requestEncoding="utf-8"              responseEncoding="utf-8"     /> 改成 <glob

  • asp下request.querystring("id")与request("id")区别

    Request从几个集合取数据是有顺序的,从前到后的顺序依次是 QueryString,Form,最后是ServerVariables.Request对象按照这样的顺序依次搜索这几个集合中的变量,如果有符合的就中止,后面的就不管了. 现在我们来分析下你得问题.  假设有个页面 test.asp?id=111  这里我们的页面是用GET的方法.这时用request.querystring("id")与request("id")是一样得,应该如果不指定REQUEST得集

  • Jquery中request和request.form和request.querystring的区别

    Request.Form是获取以POST方式提交的表单数据: Request.QueryString主要是获取地址栏参数或者以Get方式提交的数据 而Request则包含以上两种方式,会在Request.QueryString和Request.Form中都查询一遍变量.但是优先获取GET方式提交的数据,即Request.QueryString Request:包含以上两种方式(优先获取GET方式提交的数据),它会在QueryString.Form.ServerVariable中都搜寻一遍. 而且

  • Request.QueryString与一般NameValueCollection的区别

    查看了QueryString的定义类型是NameValueCollection,就误以为这是NameValueCollection的重写了ToString()的方法,于是放心地将代码转移到了业务逻辑层.因为还要重构查询参数,因此重新构建了一个NameValueCollection,并想当然地用ToString()的结果作为Key.但实际运行之后发现,每次的结果都一样的,都是第一次的查询结果.经调试,发现NameValueCollection的ToString()方法并没有重新,还是返回的是"Sy

  • ASP.NET检测到不安全 Request.Form 值解决方案汇总

    当我们在网站中使用CKEditor等富文本编辑器时,大多都会遇到这样的到警告 这是因为ASP.NET默认开启对页面提交内容的验证(不仅是ASP.NET MVC,WebForms也默认启用对页面提交的内容进行验证),解决这个问题的关键就在于在有富文本编辑器的页面或者会有提交html代码的页面关闭验证,可大致分为以下三种情况: 基于Framework2.0 webForm的网站 这种情况相比之下算是最好解决的,直接在需要的页面顶部的 Page 指令中设置 ValidateRequest="false

  • ASP.NET中Request.Form中文乱码的解决方法

    背景 涉及到两个网站的通信,网站A有一页面a,用提交表单的方式,传值到网站B的页面b.网站A统一用UTF-8编码,网站B统一用GB2312编码. web.config中编码的设置 网站A:<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" /> 网站B:<globalization requestEncoding="gb2312" responseEnc

  • 有潜在危险的 Request.Form 值避免方法

    个人感觉在 .net framework 4.0中 最好的解决" 有潜在危险的 Request.Form 值" 这个问题的方法是 在 system.web 中加上 <httpRuntime requestValidationMode="2.0"/> 这句话 因为4.0的验证在HTTP的BeginRequest前启用 复制代码 代码如下: <system.web> <httpRuntime requestValidationMode=&q

随机推荐