IE7、IE8下使用escape、encodeURI传递中文参数乱码的问题及解决方案
js跳转到指定页面,一旦escape()中文数据,浏览器就会终止和没有反应。上网搜了半天始终不得解。一种说法是,escape中文之后,url中出现了%u,IE7和IE8拒绝执行。目前看来差不多是这样的。
不得已,只好使用encodeURI(),但是asp并不能接受encodeURI的中文,而是解析成乱码。于是又上网搜了半天,始终不得解。应该是asp以及vbscript中并没有这样的内置函数。
于是不得不开始了漫长的寻找解决方案之路。
我们先来看。IE8必将取代成为主流,而IE8不支持escape,所以只有采用encodeURI和encodeURIComponent而放弃escape,对应的解码函数为:decodeURI和decodeURIComponent。
而现在的问题是,通过js用encodeURI或encodeURIComponent编码后的数据是以utf-8的方式编码的,而asp程序对utf-8支持很差,通常是gb2312的,于是服务器端将以utf-8格式编码的数据,以asp自身的server.urlencode的方式进行解码、而且这个过程是自动的、没有找到干预的办法,这样数据流经过这样的折腾,已经乱了,解析出来的中文必然是乱码。
假设asp没有自动解码,问题就好处理了。在服务器端调用js的decodeURI或decodeURIComponent函数,就可正确识别中文,因为他们才是对应匹配的。代码如下:
<script language="javascript" type="text/javascript" runat="server">function mydecodeurl(s){return decodeURIComponent(s);}</script>
这样的程序在asp中是可以直接调用的,如<%= mydecodeurl(string) %>
但是能不能让asp不自动解码呢?我认为是asp的设计机制就是这样的,即便是可以让其不自动解码,但是很可能面临新的问题,所以这不是一个好办法。
苦思了许久,想到一个变通的办法,在各个浏览器上测试通过。
使用encodeURI和encodeURIComponent函数编码过的中文是形如"%E7%94%B5%E8%84%91",asp自动解码是因为asp认为它和server.urlencode编码过的形式差不多,以为是自家的东西,结果就一厢情愿的给解码了。现在我们稍微处理一下,把其中的"%"用js替换成"$",即为"$E7$94$B5$E8$84$91",然后在js提交给asp,亲爱的看到什么了吗,asp不再强行解码了!剩下的问题就很简单了,用asp的replace再把"$"替换回"%",然后在服务器端执行js的decodeURI或decodeURIComponent函数,问题解决。
核心代码:
客户端提交时js处理(string为含中文的要处理的字符串):encodeURIComponent(string).replace(/%/g,'$')
服务器端接收并解码:
<script language="javascript" type="text/javascript" runat="server">function mydecodeurl(s){return decodeURIComponent(s);}</script>
<%
response.write mydecodeurl(replace(string,"$","%"))
%>
本文网址: http://www.lantian360.com/blueblog/blog.asp?id=535
转自:http://blog.csdn.net/lucky8star/article/details/5575427
IE7、IE8下使用escape、encodeURI传递中文参数乱码的问题及解决方案的更多相关文章
- js的url中传递中文参数乱码,如何获取url中参数问题
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...
- JS中的的Url传递中文参数乱码,如何获取Url中参数问题
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码:<script type=”text/javascript” ...
- Js的Url中传递中文参数乱码的解决
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url& ...
- asp.net——地址栏传递中文参数乱码解决方案
地址栏传递中文参数乱码解决方案: 很多人在使用地址栏传递参数的时候都会遇到一个麻烦的问题(参数为中文时乱码了),那要怎么解决呢? 其实解决这个问题也不怎么难,无非就是给要传递的中文参数一个编码解码的过 ...
- url 传递中文参数乱码问题的终极解决方法。
估计很多人在做web开发的时候,都会碰到过url传递中文参数,有时候会出现乱码的问题,但有些项目或者环境,又不会有问题.当遇到乱码的时候,上网找了很多解决方案,比如: 页面设置它的编码方式,改成utf ...
- GET方法传递中文参数乱码解决办法
1.在页面中对你的URL进行编码 使用------encodeURI(你要使用的中文参数值)如:...?username"+encodeURI(“小甜甜") 2.在后台通过解码来接 ...
- jquery与后台相互传递中文参数乱码
前端.后台传递中文参数,乱码的情况: var a="参数乱码"; //编译两次 window.location.href=encodeURI(encodeURI(&q ...
- javascript通过url向jsp页面传递中文参数乱码解决方法
解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java&quo ...
- URL传递中文参数乱码问题
web项目开发中,经常遇到中文参数乱码问题,而且有时候明明测试服务器上好用,换个正式环境就不用的情况也经常出现,今天做一个记录,防止自己以后忘记 1.地址栏url请求带中文参数 这类
随机推荐
- javascript和bigint
http://note.youdao.com/noteshare?id=91e21eb1d8c20025d72d7ee6f401e34d
- HTML5 Web Notifications 桌面推送小记
目录 简介 常用API 手动设置权限 简介 Web Notifications目前在w3c的协议中已经是"推荐"(REC:Recommendation)阶段,除了iE外,各大现代浏 ...
- linux 文件IO
1.文件描述符 (1)文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表.(2)文 ...
- pthread在Qt+Windows下的使用
pthread是牛逼的跨平台线程库,无需多介绍. 下载pthread-win32,解压后将x86里的pthreadVC2.dll放到system32目录里,将pthreadVC2.lib放入项目中去, ...
- Java集合框架(set)
set继承自collection接口,其子类和子接口如下: set的共同特性:不能添加相同的元素,通常无法记住元素添加的顺序 1.HashSet类 判断两元素相同的标准:1.equals方法返回tru ...
- springsecurity 表达式一览
表达式 描述 hasRole([role]) 当前用户是否拥有指定角色. hasAnyRole([role1,role2]) 多个角色是一个以逗号进行分隔的字符串.如果当前用户拥有指定角色中的任意一个 ...
- ArrayList和Array区别
1)精辟阐述:可以将 ArrayList想象成一种“会自动扩增容量的Array”. 2)Array([]):最高效:但是其容量固定且无法动态改变: ArrayList: 容量可动态增长:但牺 ...
- 阿里云ECS/Ubuntu下***浅析
公司项目中需要WebRTC作为即时通讯部分的核心技术,这部分的开发由我负责.实际上手前需要访问谷歌进行源码的下载以及编译,在这里记录下我各种折腾服务器***过程. 目前手上有两台阿里云ESC: 华南节 ...
- Google Map API使用详解(一)——Google Map开发背景知识
一.谷歌地图主页 谷歌地图对应不同的地区都会有一些专门的主页,首次登陆时会显示这些地区.比如,香港的:http://maps.google.com.hk,台湾的:http://maps.google. ...
- Python学习笔记(四十五)网络编程(1)TCP编程
摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014320043745 ...