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传递中文参数乱码的问题及解决方案的更多相关文章

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

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

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

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

  3. Js的Url中传递中文参数乱码的解决

    一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url& ...

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

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

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

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

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

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

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

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

  8. javascript通过url向jsp页面传递中文参数乱码解决方法

    解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java&quo ...

  9. URL传递中文参数乱码问题

    web项目开发中,经常遇到中文参数乱码问题,而且有时候明明测试服务器上好用,换个正式环境就不用的情况也经常出现,今天做一个记录,防止自己以后忘记 1.地址栏url请求带中文参数 这类

随机推荐

  1. 【ST】【CF855B】 Marvolo Gaunt's Ring

    传送门 Description 给定三个数 \(p~,~q~,~r~\),以及一个数组 \(a\), 找出三个数 \(i~,~j~,~k\) ,其中 \(i~\leq~j~\leq~k\) 最大化 \ ...

  2. Codeforces Round #384 (Div. 2) A B C D dfs序+求两个不相交区间 最大权值和

    A. Vladik and flights time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  3. HashCode与Equals回顾

    HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...

  4. Linux中怎么终止正在运行的后台程序

    linux 任务管理-后台运行与终止fg.bg.jobs.&.ctrl + z命令一. &加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &,二.ctrl + z ...

  5. P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  6. HDU 2608 底数优化分块 暴力

    T(n) as the sum of all numbers which are positive integers can divied n. and S(n) = T(1) + T(2) + T( ...

  7. HDP安全之集成kerberos/LDAP、ranger(knox自带LDAP)

    ----------------------目录导航见左上角------------------------------- 环境 HDP 3.0.1.0 (已有) JDK   1.8.0_91 (已有 ...

  8. 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)

    Inline Method (内联函数) 一个函数调用的本体与名称同样清楚易懂.在函数调用点插入函数体,然后移除该函数. int GetRating() { return MoreThanfiveLa ...

  9. 【BZOJ】1901: Zju2112 Dynamic Rankings

    [题意]带修改的查询区间第k小 [算法]树状数组套可持久化线段树 [题解]对于树状数组上的每个节点,维护可持久化权值线段树(节点为权值),从而达到查询前缀和的目的. 对于每次修改,在待修改线段树基础上 ...

  10. 【CodeForces】578 C. Weakness and Poorness

    [题目]C. Weakness and Poorness [题意]给定含n个整数的序列ai,定义新序列为ai-x,要使新序列的最大子段和绝对值最小,求实数x.n<=2*10^5. [算法]二分| ...