本文按署名・非商业用途・保持一致授权
作者: ,发表于2010年01月17日23时24分
更新1:注意,我这个方法是针对google.com,而不是google.cn。如果你使用google.cn,那么请进入google.cn之后,点击下面的”google.com in english”进入google.com界面之后再尝试使用我的方法。
今天看电视的时候,突然想到是否可以用冷僻的编码来规避GFVV的基于内容过滤的子系统(其他的还有基于http host和ip)。
google搜索有两个很重要的设置:ie(input encoding)和oe(output encoding)。ie就是google将会以何种编码来处理q参数,而oe就是google的结果要以何种编码输出,并以何种conent- type:encoding声明。
首先,GB系列和UTF-8不用考虑了,如果连这两个编码都没搞定,GFVV就白活了。于是第一想法是用UTF-16。不过很可惜,google不支持utf-16编码的输出(不过支持UTF-16的输入,包括LE和BE)。
于是,想找其他支持中文的编码。很庆幸的是,阴差阳错之下,虽然没找到其他支持中文的编码,但是立刻就发现了发现ISO-8859-1编码可以避过GFVV。虽然该编码不包含中文在内,但是正是由于不支持,所以浏览器用html实体来发送了数据,所以避过了GFVV。
例如我输入”测试“,由于大多数浏览器的文本框是用unicode作为字符集的(当然,是何种字符集编码我不知道,也不需要知道),而”测试“在 ISO-8859-1里是没有的,所以浏览器会把它转成unicode的html实体“测试”,然后传递给url处理函数。最后发送给服务器的,就是串“ %26%2327861%3B%26%2336718%3B%26%2321151%3B”。简单地说,就是实体的urlencode。
google服务器接收到这个串后,把iso-8859-1的字符做字符集转换为unicode的某种编码,而html实体(也就是上面的“测试” 的实体)解码为unicode的同一个编码。然后查询,以oe=ISO-8859-1输出。而输出结果里,超出8859范围的字符,也以实体形式来返回。
于是,从此我就开始用http://www.google.com/webhp?ie=ISO-8859-1&oe=ISO-8859-1作为我的google搜索首页了。
更新2:rthr给出了一个可能更方便的链接(你不会被跳转到.cn)http://www.google.com.hk/webhp?ie=ISO-8859-1&oe=ISO-8859-1
当然这个方法只能让google本身不会被reset,而你点过去的站点里如果存在某些关键词,那个站点还是会被reset的。实际上,对我来说, 在大多数情况下google被reset,都是在搜索正常资料的时候出现,我根本没想过去点那个结果。所以,这个办法对我来说,还是有点用的。
不过将来如果google域名直接被屏蔽(这个可能性是存在的),这个方法就没用了。
要提醒的是这个办法对google.cn是没什么效果的,因为google.cn本身有内容审查,而且服务器也是在这个大局域网里。
另外我只在火狐和safari做了测试。其他浏览器可能会对在某种编码里不被支持的字符给丢弃掉。
没有评论:
发表评论