背景

asp的第一版是0.9测试版,自从1996年ASP1.0诞生,迄今20余载。虽然asp在Windows2000 IIS服务5.0所附带的ASP 3.0发布后好像再没有更新过了,但是由于其入手简单,天然的asp+access零配置,在零几年火的就像现在的微信小程序。虽然时过境迁,其至今在国内还有小规模的用户市场。

据工信部发布消息,截止到2018年底,中国中小企业的数量已经超过了3000万家,个体工商户数量超过7000万户。中小企业信息化普遍面临资金短缺、信息人才不足等问题,为了降低成本,故而企业网站一般外包给其他小规模的网络公司制作、维护,网络公司一般是套站、仿站。操作系统一般使用Windows,web程序搭建上,一般使用php+MySQL或者asp+access的“黄金”组合。

实践

这不,笔者最近又用上了asp+access,不过不是企业站的,而是一个小型的教学管理系统。

开发过程中碰到一个问题,asp页面前后端都是用的gb2312编码,前端使用ajax来传递中文参数,后端进行编码处理后,以免存入access为乱码。

注:建议前后端都是用utf-8编码,就没下面这么麻烦了。

前端代码:

$.post("result.asp?act=update",{
val: escape(val)
},function(result){
result = JSON.parse(result);
});

后端代码:

Dim val
val = Trim(vbsUnEscape(request.form("val")))

ECMAScript v3 已从标准中删除了 escape() 函数和 unescape() 函数,并反对使用它们,因此应该使用 decodeURI() 和 decodeURIComponent() 取而代之。

… All of the language features and behaviours specified in this annex have one or more undesirable characteristics and in the absence of legacy usage would be removed from this specification. …
… Programmers should not use or assume the existence of these features and behaviours when writing new ECMAScript code. …

https://www-archive.mozilla.org/js/language/E262-3.pdf
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape

Function vbsUnEscape(str)
Dim i,s,c
s=""
For i=1 to Len(str)
c=Mid(str,i,1)
If Mid(str,i,2)="%u" and i<=Len(str)-5 Then
If IsNumeric("&H" & Mid(str,i+2,4)) Then
s=s & CHRW(CInt("&H" & Mid(str,i+2,4)))
i=i+5
Else
s=s & c
End If
ElseIf c="%" and i<=Len(str)-2 Then
If IsNumeric("&H" & Mid(str,i+1,2)) Then
s=s & CHRW(CInt("&H" & Mid(str,i+1,2)))
i=i+2
Else
s=s & c
End If
Else
s=s & c
End If
Next
vbsUnEscape=s
End Function

另附上一般这里用不上的vbsEscape:

'escape时不变的7个符号: *(42) +(43) -(45) .(46) /(47) @(64) _(95)
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

如果,在前端使用的是encodeURI/encodeURIComponent,而不是escape,那么,后端还可以像下面这样写:

<%
Function strDecode(str)
Dim objScript
Set objScript = Server.CreateObject("ScriptControl")
objScript.Language = "JavaScript"
strDecode = objScript.Eval("decodeURIComponent(""" & str & """.replace(/\+/g,"" ""))")
Set objScript = NOTHING
End Function
%>

上面的vbsUnEscape函数也可以这么写!

原文:https://xushanxiang.com/2019/11/asp-ajax-escape.html

ASP使用ajax来传递中文参数的编码处理的更多相关文章

  1. asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别

    asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别(一) HttpUtility.UrlEncode 方法: 对 ...

  2. asp.net——地址栏传递中文参数乱码解决方案

    地址栏传递中文参数乱码解决方案: 很多人在使用地址栏传递参数的时候都会遇到一个麻烦的问题(参数为中文时乱码了),那要怎么解决呢? 其实解决这个问题也不怎么难,无非就是给要传递的中文参数一个编码解码的过 ...

  3. url 传递中文参数乱码问题的终极解决方法。

    估计很多人在做web开发的时候,都会碰到过url传递中文参数,有时候会出现乱码的问题,但有些项目或者环境,又不会有问题.当遇到乱码的时候,上网找了很多解决方案,比如: 页面设置它的编码方式,改成utf ...

  4. Web报表页面如何传递中文参数

    1.场景描述 在用报表开发工具FineReport设计的web报表中,给iframe设置src嵌入某个报表时,往往会给报表传递初始的参数值,例如: <iframe id="report ...

  5. GET方法传递中文参数乱码解决办法

    1.在页面中对你的URL进行编码 使用------encodeURI(你要使用的中文参数值)如:...?username"+encodeURI(“小甜甜") 2.在后台通过解码来接 ...

  6. js的url中传递中文参数乱码,如何获取url中参数问题

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...

  7. jquery与后台相互传递中文参数乱码

    前端.后台传递中文参数,乱码的情况: var a="参数乱码"; //编译两次        window.location.href=encodeURI(encodeURI(&q ...

  8. JS中的的Url传递中文参数乱码,如何获取Url中参数问题

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码:<script type=”text/javascript” ...

  9. SSH通过超链接传递中文参数出现乱码问题

    通过超链接传递中文参数出现乱码问题 tomcat中的server.xml文件中修改如下配置: <Connector port="8080" protocol="HT ...

随机推荐

  1. 使用 statcounter 统计 Hexo 博客访问量

    介绍 statcounter是一个提供网站访问统计服务的网站: StatCounter is a simple but powerful real-time web analytics service ...

  2. JVM 知识点补充——永久代和元空间

    之前已经讲过了不少有关 JVM 的内容,今天准备将之前没有细讲的部分进行补充,比如:永久代和元空间. 永久代 Java 的内存中有一块称之为方法区的部分,在 JDK8 之前, Hotspot 虚拟机中 ...

  3. c# winform用sharpGL(OpenGl)解析读取3D模型obj

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11783026.html 自己写了个简单的类读取解析obj模型,使用导入类,然后new个对象,在 ...

  4. django-Views之request(二)

    book/views.py def index(request): http_list = { '<h1>请求协议: <span style="color:red" ...

  5. Spring Boot集成JSON Web Token(JWT)

    一:认证 在了解JWT之前先来回顾一下传统session认证和基于token认证. 1.1 传统session认证 http协议是一种无状态协议,即浏览器发送请求到服务器,服务器是不知道这个请求是哪个 ...

  6. Rust入坑指南:有条不紊

    随着我们的坑越来越多,越来越大,我们必须要对各种坑进行管理了.Rust为我们提供了一套坑务管理系统,方便大家有条不紊的寻找.管理.填埋自己的各种坑. Rust提供给我们一些管理代码的特性: Packa ...

  7. (IDEA) 搭建Maven并使用Maven打包部署

    1.配置Maven的环境变量 a.首先我们去maven官网下载Maven程序,解压到安装目录,如图所示: b.配置M2_HOME的环境变量,然后将该变量添加到Path中 备注:必须要有JAVA_HOM ...

  8. 学习笔记04IIS

    IIS机制:1.能监听端口,获取socket的客户端对象2.获取请求报文,将请求报文变成对象.3.处理请求报文,通过HttpApplication.ProcessRequest方法来处理HttpCon ...

  9. [考试反思]0825NOIP模拟测试31:喘息

    好吧,我又活了 大脸又. 240,220,210,200,200... T1是个不会证明的傻子找规律算上看了一遍三道题之后一共20分钟搞定. skyh打的是错的可是成功qj全部测试点得到AC(会被手模 ...

  10. javaScript中this到底指向谁

    1.前言 在JavaScript中,this的指向一直是大多数初学者的易错点,总是搞不清楚this到底指向谁,而在求职面试中,this的指向问题往往又是高频考点.本篇博文就来总结一下在JavaScri ...