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请求带中文参数 这类
随机推荐
- [ACM][2018南京预赛]Lpl and Energy-saving Lamps
一.题面 样例输入: 5 4 3 10 5 2 7 10 5 1 4 8 7 2 3 6 4 7 样例输出: 4 0 1 1 3 6 5 1 5 1 2 0 3 2 4 4 3 6 5 1 二.思路 ...
- spoj694 DISUBSTR - Distinct Substrings
Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...
- laravel5.1 使用中间表的多对多关联
用户表user 标签表tag 中间表user_tag(user_id,tag_id) 在user模型中定义tags关联如下: public function tags() { return $this ...
- 安装好dashboard 登录出现错误
验证发生错误.请稍后再试一次. While turning SELinux off certainly does the trick, it is somewhat like using a sled ...
- 对于redis框架的理解(三)
上一篇讲完了initServer的大体流程,其中aeCreateEventLoop(),这个函数 没有详细说明,我们在这一篇里讲述Ae.h和Ae.c, 这里面的api阐述了如何创建 eventLoop ...
- google protobuf service使用
http://note.youdao.com/noteshare?id=c59aaf827878e7a3611588f3abcd3bee
- 「CSS」文本编排相关的CSS属性设置
1.font-family:设置字体族. 格式为font-family:字体1,字体2,……,通用字体族|inherit. 通用字体族,是指一类相似的字体.W3C的CSS规则规定,要指定一个通用字体族 ...
- libcurl移植到android
一.总体概览 C库:libcurl 3.7 目标平台:android 编译平台:ubuntu 12 编译工具:ndk r7 or later 二.已知方法 1. 官网上给了两种方法,第一种方法是使用a ...
- SpringCloud学习(1)——SpringCloud概述
微服务架构: 微服务架构是一种架构模式或者说是一种架构风格, 他提倡将单一应用程序划分成一组小的服务, 每个服务运行在其独立的进程中, 服务之间互相协调,互相配合, 为用户提供最终价值.服务之间采用轻 ...
- Window启动Zookeeper报错java.lang.NumberFormatException: For input string:
用zkServer start命令报如题的错误,改为直接用zkServer启动则ok 还有在window下,myid文件不能是myid.txt,不能带文件格式 dataDir=D:/zookeeper ...