标签: HTTP

GET方式传递中文错误引发的思考

今天在“天乙社区”里,网友报了一个BUG,在版区内搜索中文的时候,分页会出现问题,我在社区里试了一下,果然有这样的问题,我记得这个问题在写代码的时候特意注意过,我做了URLEncoder和URLDecoder,但还是有问题,当时可能测试不够,把这个问题漏过了,这个问题出现的原因很简单,就是在GET方式传递中文的时候,由于编码的问题出现了字符的错误,解决的方法也有几种:

第一种,是不采用GET方式,采用POST方式,可以在页面上加入一个隐藏表单,把数据写进去,分页的时候,用JavaScript提交,POST方式发送到服务器,这样的做法可以很好的保护数据完整性,也比较安全,但是对于社区来说需要修改页面,比较麻烦。

第二种,就是将中文内容做一些编码,比如Base64,之后再做一次URLEncoder,这样应该就可以传递正确的信息,我就按照这个方法修改了一下程序,没有问题了。

这时候我突然想起了Taobao的奇怪URL编码方式,比如我在淘宝上搜索“尼康 镜头”,请求到的地址是

http://search1.taobao.com/browse/0/n-g,ytq37njax2243ny——-2———40–commend-0-all-0.htm?at_topsearch=1&ssid=e-p1-s5

注意其中的“ytq37njax2243ny”,在JavaEye里有位高人写了一篇关于淘宝URL编码规则的文章,着实很强,淘宝也用的是Base64,只不过用自己的码表,这样编码出来的字符串就像“ytq37njax2243ny”,乍看上去挺怪异的,但为什么要这么做,我似乎明白了一些,淘宝、阿里巴巴都采用他们自己的Webx框架,在其前端专门有模块是处理URL的,包括URL的生成、解析,其好处有很多,其中一个重要的原因应该是解决编码问题,附件是阿里巴巴webx的一个文档,大家可以看看,有什么启发。

阿里巴巴webx框架资料