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请求带中文参数 这类
随机推荐
- 【CodeChef】ForbiddenSum
Portal --> CC ForbiddenSum Solution 场上想到了\(O(NM)\)的做法..然而并没有什么用 首先考虑比较简单的一个问题,给定一个数组\(A\),问这些数不能凑 ...
- Codeforces 938.D Buy a Ticket
D. Buy a Ticket time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 问题分析 - 电容的ESR
ESR,是Equivalent Series Resistance三个单词的缩写,翻译过来就是“等效串连电阻” 理论上,一个完美的电容,自身不会产生任何能量损失,但是实际上,因为制造电容的材料有电阻, ...
- [吴恩达机器学习笔记]12支持向量机2 SVM的正则化参数和决策间距
12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 12.2 大间距的直观理解- Large Margin I ...
- 不管谁坐了CIO的位置 都必须了解的法则
目前一些设立了CIO岗位的央企中,CIO也只做到了“IO”(信息官,Information Officer),而没有做到“C”(首席,Chief).老总们总在抱怨没有合适的人选:懂技术的不懂业务,懂业 ...
- zoj 3229 Shoot the Bullet(有源汇上下界最大流)
Shoot the Bullethttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3442 Time Limit: 2 Second ...
- 树dp...吧 ZOJ 3949
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5568 Edge to the Root Time Limit: 1 Secon ...
- HTML入门(一)
---恢复内容开始--- HTML 一 .HTML介绍 1. 什么是HTML? 超文本标记语言: 超文本: 比普通文本更强大 标记语言: 使用一组标签对内容进行描述的一门语言,它不是编程语言! 2. ...
- Parencodings(模拟)
ZOJ Problem Set - 1016 Parencodings Time Limit: 2 Seconds Memory Limit: 65536 KB Let S = s1 s2 ...
- 【BZOJ4565】【HAOI2016】字符合并 [状压DP][区间DP]
字符合并 Time Limit: 20 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为 n 的 01 串,你 ...