ASP中实现的URLEncode、URLDecode自定义函数

在做ajax中的post时,发现在服务器端取得数据时总是乱码,网上看了些解决方法也搞不定,我post过去时是xml形式,由于乱码服务器端xml也解析不了或出错。于是在post前先把它编码,到服务器端再解码,这样问题解决了,但是要是数据很大时估计会很影响速度。

虽然ASP中的request会自动解码经过url编码的字符串,但是Request.BinaryRead(Request.TotalBytes)取得post数据时却不会解码,所以要进行解码。

下面是我找到的一个ASP中server.urlencode函数的解码函数

代码如下:

Function URLDecode(enStr)
  dim deStr,strSpecial
  dim c,i,v
    deStr=""
    strSpecial="!""#$%&'()*+,.-_/:;< =>?@[/]^`{|}~%"
    for i=1 to len(enStr)
      c=Mid(enStr,i,1)
      if c="%" then
        v=eval("&h"+Mid(enStr,i+1,2))
        if inStr(strSpecial,chr(v))>0 then
          deStr=deStr&chr(v)
          i=i+2
        else
          v=eval("&h"+ Mid(enStr,i+1,2) + Mid(enStr,i+4,2))
          deStr=deStr & chr(v)
          i=i+5
        end if
      else
        if c="+" then
          deStr=deStr&" "
        else
          deStr=deStr&c
        end if
      end if
    next
    URLDecode=deStr
End function

再附一个编码函数,这个与server.urlencode不一样之处是:server.urlencode会将html或xml等标签,如
也会进行编码,而下面这个函数不会。我是用下面的进行编码,再解码,因为我用post时用xml的。

代码如下:

private Function URLEncoding(vstrIn)
    strReturn = ""
    For i = 1 To Len(vstrIn)
    ThisChr = Mid(vStrIn,i,1)
    If Abs(Asc(ThisChr)) < &HFF Then
    strReturn = strReturn & ThisChr
    Else
    innerCode = Asc(ThisChr)
    If innerCode < 0 Then
    innerCode = innerCode + &H10000
    End If
    Hight8 = (innerCode And &HFF00)/ &HFF
    Low8 = innerCode And &HFF
    strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
    End If
    Next
    URLEncoding = strReturn
  End Function

(0)

相关推荐

  • asp实现截取字符串函数

    如果标题过长,因为页面布局的限制,只能列表10个字符,这个函数会帮你实现的 复制代码 代码如下: '截取字符串 strvalue(标题,字数) function strvalue(str,lennum)     dim p_num     dim i     if strlen(str)<=lennum then         strvalue=str     else         p_num=0         x=0         do while not p_num > lenn

  • ASP函数大全解析

    Array()  函数返回一个数组 表达式 Array(list) 允许数据类型: 字符,数字均可 实例: <% Dim myArray() For i = 1 to 7 Redim Preserve myArray(i) myArray(i) = WeekdayName(i) Next %> 返回结果: 建立了一个包含7个元素的数组myArray myArray("Sunday","Monday", ... ... "Saturday&quo

  • asp中的Rnd 函数

    Rnd 函数 描述 返回一个随机数. 语法 Rnd[(number)] number 参数可以是任意有效的数值表达式. 说明 Rnd 函数返回一个小于 1 但大于或等于 0 的值. number 的值决定了 Rnd 生成随机数的方式: 如果 number 为 Rnd 生成 小于零 每次都相同的值,使用 number 作为种子. 大于零 序列中的下一个随机数. 等于零 最近生成的数. 省略 序列中的下一个随机数. 因每一次连续调用 Rnd 函数时都用序列中的前一个数作为下一个数的种子,所以对于任何

  • ASP 时间函数及如何获取服务器时间的写法

    一.常用的ASP时间函数 1.now() 获取当前系统日期和时间,ASP输出格式:<%=now()%> 2.Year(now()) 获取年份, ASP输出格式:<%=Year(now())%> 3.Month(now()) 获取当前月份,ASP输出格式:<%=Month(now())%> 4.day(now()) 获取当天数,ASP输出格式:<%=day(now())%> 5.hour(now())获取小时数,ASP输出格式:<%=hour(now()

  • ASP实现强制图片下载函数

    图片不进行处理,图片默认是用浏览器打开显示,如果希望图片变为下载可以使用以下代码 function downloadFile(strFile) strFilename = server.MapPath(strFile) Response.Buffer = True Response.Clear Set s = Server.CreateObject("ADODB.Stream") s.Open s.Type = 1 on error resume next Set fso = Serv

  • Asp Split函数之使用多个分割符的方法

    首先,我在知道Split这个函数的作用,是把一个字符串按指定的分割符分割成一个字符串数组. ASP里有这个Split,是这样定义的dim Split(byval source as string ,byval str as string) as string()   source是源字符串,str是分隔符   我这里用了VB.net的写法,方便说明返回值的类型和参数的类型.   大家一看就明白怎么用了. 在C#里,我们是这样用的   string[] Split(string source,ch

  • asp实现获取MSSQL数据库表指定条件行数的函数

    复制代码 代码如下: '数据库表行数函数,这是取表的行数 Function GetTblRows(TblName)     '如果TblName表名值为空,则     if TblName="" Then        GetTblRows="未知TblName"     exit Function     Else        set rec = server.createobject("adodb.recordset")        SQ

  • asp中实现清除html的函数

    这个函数是必需要的,很多黑客来捣乱,黑掉数据库,会注入大量的病毒js,在存储和展示文本数据的时候,使用此函数过滤一下,可避免不少麻烦 clearhtml代码 '清除HTML代码 function clearhtml(content) content=replacehtml("&#[^>]*;","",content) content=replacehtml("</?marquee[^>]*>","&quo

  • asp与js的类型转换函数介绍

    字符串转化为整数 asp: cint()--注意只能转换短整数值的范围必须在-32768与32767之间,长整数应用clng() 如果输入的不是纯数字字符串或者空字符串,则直接500错误.所以输入前应该检查是否为数字类型. 复制代码 代码如下: Function JCID(ByVal ParaValue)     If ((Not isNumeric(ParaValue)) or (Trim(ParaValue)="")) Then             JCID=0     Els

  • ASP移动文件函数movefile权限不足的替代方法

    这几天做一个项目,是写一个语句,将D盘的文件全部移动到E盘去,在本地XP环境下测试是很好的. 可是放到windows 2003服务器后,提示权限不足. 我的IIS网站目录放在D盘,而E盘只是一个新加卷,有一些文件很大也很多,但是D盘不够用了,所以出此下策. 百度了一下,很多这样的问题,无非就是增加E盘的权限啊,或者是把E盘当作虚拟目录. 可是都不管用,照样提醒,唯一的区别就是我使用的是动态卷,而XP下是基本卷,我不想改变卷盘. 最后找到了下面的办法: 用fso的movefile会出现权限不足的情

  • ASP转换格林威治时间函数DateDiff()应用

    我今天介绍的是在ASP中如果把时间(例如:2008-8-8 13:45:22)转换成秒的函数,和相反的把秒转换成时间的函数.当然时间转换的时候.必须有一个相对的固定时间,那就是格林威治时间.大家想想因为格林威治时间是以" 1970 年 1 月 1 日 00:00:00 "开始的,ASP提供了一个叫 DateDiff() 的函数,这个函数可以返回一个时间差的秒,那就是说我们放进去一个格林威治标准时间与现在的时间对比一下返回秒就OK.但我们还要注意时区,我们中国是GMT+08:00:00(

随机推荐