IE 如何处理含 CJK 字符的 url

IE / Chrome / uri

最近遇到 IE 10 打开一个网页总是有个地方显示不出来,原来以为是 IE 10 自带兼容模式的问题,后来发现,其实不是这样

问题

这是一个下拉菜单的控件,当选择一个选项后,OnChange会发起一个 get 请求,get 请求的结果会呈现在网页的另一部分,页面在谷歌浏览器显示正常,但是在 IE 10 浏览器中,看上去这个 get 请求一直都不成功。

解决

f12 看了一下网络请求,发现 IE 10 上这个请求还是发出去了,但是收到的结果是 http 400 的报错页面,导致无法解析成 json。

既然知道了 IE 有问题谷歌没问题,那我们看看谷歌的请求长什么样子,重新在谷歌浏览器打开网页,f12 对比一下两边的请求,很快我们就看到,两个 get 的 uri 就有差别,这个请求是 js 拼接出来的结果,但是 IE 和谷歌的处理方式有所不同:

  • IE 发送的请求类似于 http://domain/get?kw=中文
  • 谷歌发送的请求类似于 http://domain/get?kw=%E4%B8%AD%E6%96%87

谷歌浏览器自动把脚本中的请求做了 uri encoding。

结论

所以我们可以回答标题的问题了:IE 对含 CJK 字符的 url 没有进行任何处理(至少是脚本中)。