firefox chrme 浏览器地址栏URL参数汉字BUG问题排查总结

来源:互联网 发布:二维图形变换矩阵 编辑:程序博客网 时间:2024/06/10 21:45

转载地址:http://axdhxyzx.blog.163.com/blog/static/5894227820129251361422/

我在开发网页时,一个分类条件用汉字做URL参数,然后在页面加载时进行判断来查询对应数据并呈现数据列表。
正常情况下,这个分类条件是用户在页面上点击链接获得,可是我自己测试时,无意中在浏览器地址栏中输入了这个参数值,结果噩梦就来了,而且持续两天!!!
先介绍一下问题产生的环境:浏览器怎么开发的,我没做过,手里有一个ie9和一个金山的猎豹浏览器(双核,一个极速内核疑是谷歌内核,一个是兼容内核疑是ie6内核),操作系统用的是简体中文版,默认字符编码应该是ANSI(不知道它跟Unicode什么关系),因为在记事本另存为时,默认的编码格式就是这个,我开发的网页从Web.Config到页面文件所有的编码格式和字符集都是采用UTF-8,ie9和猎豹浏览器编码格式未做特殊设置,就是安装时的默认设置,而火狐浏览器的编码格式设置为UTF-8,自动检测处于关闭状态。
问题是:在我网页上如何点击链接,后台都能接收到正确的参数值(如风景背景),而在火狐浏览器上点击链接,也同样没问题,而且我为了编码上不出错,在拼URL字符串时都先编码,然后在后台接收参数时再解码。那么问题如何产生呢?当我直接在地址栏里输入地址,其中的参数直接用输入法输入汉字时,响应的页面上就出现了乱码,也就是说编码解码用的不是一个编码格式了。
接下来查找问题原因和测试:
首先,我在输出链接时已经转码了,为什么还是显示汉字?
回答,其实这是一个假象,当你整体复制地址栏中的链接到记事本上时,会发现文本信息已经被转码,也就是说,我的字符串是转成UTF8编码格式的汉字,地址栏中的字符串也是UTF8格式,而浏览器本身具有解码功能,它自动将UTF8编码解码成汉字,一句话,形式是汉字,实质是UTF8编码当我后台接收URL 参数时,也会将UTF8编码格式的字符串解码成汉字存储在字符串变量中。
其次,我在地址栏中输入汉字,火狐到底“帮“我做了什么?
回答,当你输入汉字时,火狐自动将其转码成GB2312编码格式,这个为什么要转这个编码格式,目前还不清楚,怀疑是火狐调用了系统默认的编码格式。这个编码格式是怎么来的不清楚,但是这个编码是GB2312编码格式是确认无疑的。
随后,正式问题到来,为什么我在地址栏输入汉字就乱码了呢?
因为当在地址栏中输入汉字时,火狐浏览器自动将汉字转码为GB2312编码格式,请求到了服务器后,后台文件Web.Config中的requestEncoding的编码格式设置为UTF-8,这样在解码时就出了问题,编码和解码不是一套编码格式,出来的就是乱码,经过测试,将文件Web.Config中的requestEncoding的编码格式改为gb2312,页面就正常了,但是这是问题又来了,本身就是为了不产生乱码而使整个网站统一采用了UTF-8编码,所以当其他正常操作时,页面又乱码了,而且也不能只为这一种情况而更改设置,试想若有人用的火狐在对地址栏输入汉字编码为其他格式呢?那么只用gb2312是解决不了那么多未知情况。而且后台在接收字符串时进行解码只能用一套编码格式,如何应对那么多的不同编码格式呢?就算是可以后台进行判断,但是汉字本身就不被计算机识别,势必要转成对应的编码,所以不管是哪种编码,对计算机都是正确的,何以判断?!只有当解码后的字符显示出来以后,人类才能分辨是否是汉字。
最后,没有问题了,也没有解决问题。因为URL参数本身就不是让用户自己手动在地址栏中输入的,地址栏只是让用户在进入网站入口(即网站首页时输入域名)用的,其余的走向都应该通过页面链接实现。同时地址栏中的字符串应该是不存在汉字的,值存在计算机能识别的最基本的字符才对,这个过程我们网页一般都会进行处理,可是现在的浏览器越来越智能,它会将看不懂的编码直接给你解码成对应的字符供用户观看。可是笔者还有一个疑问,同样的操作为什么ie9浏览器不出问题,难道说它是操作系统的亲戚,就能自动识别编码了?为什么猎豹浏览器不出问题,难道说它是中国浏览器厂商开发的,就能自动识别中文编码了吗?都说火狐好,它的安全性确实好,除了安全特性,它还给开发者带来哪些好处了呢?我一点都看不到,而且做一个破网页,IE测完谷歌测,谷歌测完火狐测,即使是对火狐专门做的网页,难道你就要求你的用户只用火狐浏览器吗?想当初大秦帝国的秦始皇统一文字、统一度量衡、统一。。。,今天已经没有那么强大的中国领袖了,连个最起码的中文文字的编码格式都不能统一,还七零八落的,真是无语了。。。
好了,喷完了,其实我知道,不是火狐的错,而是我对计算机知识掌握得还不够多。

0 0