最近在有.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传参(汉字)的家伙提个醒,它容易出错。除非用户是更高的版本。