Posts Tagged ‘encode’

九月 10th, 2008

诡异的ajax和浏览器编码

No Comments, 前端开发, by army8735.

缩小讨论范围,仅限常用的浏览器:ie和ff;仅限常用的搜索引擎:google和百度。
先看google:搜索关键字时由于页面编码也是utf8,所以等于直接encodeURI后添加到url后面;
再看百度:由于页面编码是gb2312,所以关键字编码相当于urlencode后添加到url后面。
于是,矛盾就出现了。假如从搜索引擎搜索后点击链接连到我们的页面,想根据document.referrer来提取出关键字,再交给后台处理一下,最后返回显示的时候,google就和百度战起来了……
这还不算什么,即使一段相同的encodeURI编码传给后台处理一下,再通过ajax返回前端显示的时候,ff和ie也战起来了……
好吧好吧,这两对儿真是恩恩怨怨反复纠缠你死我活鱼死网破啊!最终还得我们来辛辛苦苦任劳任怨兢兢业业毫无怨言地来调节。

首先,从document.referrer提取出的关键字要根据来源判断,从google来的是utf8,从百度来的是gb2312。传给xhr时加一个参数标明来源,再加个参数判断标明用户使用浏览器。
然后,后端处理的php逻辑页面,必须改为utf8编码的文件。通过判明来源和浏览器种类分别处理:ff下的gb2312就转换为utf8;ie下无论什么都转为utf8。
最后,在前端gbk编码的情况下显示,终于结果正常了……

其实这种情况足以应付大多数需要了,因为搜索引擎编码我们常用的不是gb2312就是utf8,像yahoo、qq等。而浏览器除了ie也就ff、极少数用标准的opera什么等等等等等。
这次实验证明了:跨国婚姻矛盾多啊!性格不合是最主要的原因!