IE6 发送奇数个汉字出现的BUG 传参时 .NET

39 篇文章 0 订阅

最近在有.NET 修改一个项目的部分,原打算用传参的方式把一个页面的汉字参数 送到另一个页面。当然我的机子是WINDOWS7  浏览器有  ie8  和火狐  在这两个浏览器上测试的时候没有问题,可是用户的浏览器仍然是大众化的ie6  。结果用户发现当汉字为奇数的时候修改该值,该参数传送就失败了(跳转到下一个页面失败) , 而偶数个反而没有事。后台在网上搜索了一番。发现时ie6对 utf-8支持不是很好,也就说说村子BUG。

我当时的解决方法第一个就是:

利用escape()函数来解决:在js中加了escape()函数

escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

语法

escape(string)
参数描述
string必需。要被转义或编码的字符串。

返回值

已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。

提示和注释

提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。

注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

下面是我的js传参部分:

var actionUrl = "news_type_edit.aspx?action=addchild";
  actionUrl += "&id=";
   actionUrl += id;

  actionUrl += "&name=";
   actionUrl +=escape(name);

后来为了避免潜在问题:没有使用它 。只是单单传送一个id值  然后通过数据库获取其他相关的数据。

网上一些说明缘由(搜索的):

原理:见下文——在windows操作系统上使用IE作为浏览器时,常常会发生这样的问题:在浏览使用UTF-8编码的网页时,浏览器无法自动侦测 (即没有设定“自动选择”编码格式时)该页面所用的编码,即——当网页标题是中文时,可能会出现打不开网页的情况;即使网页已经声明过编码格 式:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />也会造成某些含有中文UTF-8编码的页面产生空白输出。

     如果使用的是Mozilla、Mozilla Firefox、Sarafi的浏览器这不会造成这个问题。这是由于IE解析网页编码时以HTML内的标签优先,而后才是HTTP header内的讯息;而mozilla系列的浏览器则刚刚相反。

     由于UTF-8为3个字节表示一个汉子,而普通的GB2312或BIG5是两个,因此,页面输出时,由于上述原因,使浏览器解析、输 出<title></title>的内容时,如果在</title>前有奇数个全角字符时,IE把UTF-8当作两 个字节解析时出现半个汉字的情况,这时该半个汉字会和</title>的<结合成一个乱码字,导致IE无法读 完<title>部分,使整个页面为空百输出。而这个时候如果察看源文件的话,会发现实际上整个叶面全部已经输出了。

     因此最简单的解决办法是再网页文件的<head></head> 标签中一定要把字符定义<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 放在<title></title>之前。

在这想给一些想用ie6传参(汉字)的家伙提个醒,它容易出错。除非用户是更高的版本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值