Javascript与ASP.NET(一般处理程序)关于URL(get方式)传递中文乱码问题的解决方案


一、首先,说一下我要实现的功能

    根据老师ID、学年、学期,查询该教师教授的课程信息。


二、传递参数我遇到的问题:

    我通过传递教师ID、学年和学期从数据库查询出该教师所教的课程信息,展现在界面上,从数据库我能查询出数据,为什么在界面不出数据呢,我断点调试,发现这样一个现象。我在js中传递的参数,在一般处理程序中获取时,是这样显示的:

    于是有了这篇文章的诞生,通过对此问题的搜索,让我了解了编码解码的一些基本知识。


    在实际的开发中,我们在页面和页面之间进行数据传递的时候,有时我们会选择Get方式传递参数,例如:

url: "../handler/QueryCourseByTeacher.ashx?TeacherID=" + teacherID.value + "&SchoolYear=" +getschyearvalue + "&Semester=" + getsemestervalue + "&t=" + new Date().getTime(),
     这是用js传递参数给一般处理程序页面,然后将传递的参数作为参数,在数据库进行查找相关数据,其中getschyearvalue与getsemestervalue为中文参数,当我们使用这种方式去查找数据的时候,就会出现我上图中的乱码问题,因为我们需要注意的是:凡是通过get方式进行URL传递中文参数一定要进行URL编码


三、了解一下百科中对URL编码的解释

什么是URL编码
       url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输入格式样子象这样:
    theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes


URL编码遵守的规则
    每对name/value由&;符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。

四、如何解决URL中文参数传递编码问题?

    1、首先,js中,进行URL编码(使用escape)

     

url: "../handler/QueryCourseByTeacher.ashx?TeacherID=" + teacherID.value + "&SchoolYear=" + escape(getschyearvalue) + "&Semester=" + escape(getsemestervalue) + "&t=" + new Date().getTime(),

    2、一般处理程序或.ASPX接收页面进行接收参数并解码,使用(context.Server.UrlDecode):

        //学年
        string strSchoolYear = context.Server.UrlDecode(context.Request.QueryString["SchoolYear"]);
        //学期
        string strSemester = context.Server.UrlDecode(context.Request.QueryString["Semester"]);


       这样传递中文就不会出现乱码问题了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值