码迷,mamicode.com
首页 > 其他好文 > 详细

ISO-8859-1乱码恢复

时间:2015-06-30 14:58:56      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:乱码   iso-8859-1   jquery   乱码恢复   

为兼容较旧的jQuery插件,我把jQuery版本从2.1.x降到了1.8.x,这比添加jquery-migration插件要来得干脆。

我没把这两个版本的的差别一一记下来,而是直接改个版本号。降级之后页面没有报错,我也就认为没问题。直到有一天发现数据库很多用户生成内容乱码了。

通过一番调试,原因找到了:jQuery ajax使用的http方法,1.9.0之前用选项type指定,而1.9.0及之后用选项method(选项type为method的别名)指定:

//from jquery 1.9.0
jQuery.ajax("/action",{
    method:"POST"
});
//before jquery 1.9.0
jQuery.ajax("/action",{
    type:"POST"
});

当把jQuery版本从2.1.x降到了1.8.x时,下面的代码就隐藏着一个bug,不报错但很致命:

jQuery.ajax("/action",{
    method:"POST" //buggy
});

原因是jQuery 1.8.x不认选项method,意味着jQuery最终的决定使用的http方法会是默认的"GET"

当出现乱码时,首先可能会确定服务端的字符解码有没有问题,即使服务端字符解码设置已经稳稳地应用在其他很多项目中。

bug显露出来了,kill掉就行。但这期间bug造成的数据库不少用户生成数据乱码怎么办,承认技术失误并向用户道歉?

很久以前听说有软件可以将乱码恢复成正常文本,这说明恢复还是有希望的。现已知乱码是因未对URI进行解码造成的,因此解码之后应该就能恢复成正常文本。照着这种思路我把乱码内容复制出来做了个测试:

decodeURIComponent(escape("??€??′??3?1°??€??a?????ˉ????2???‰?±3?????"))

竟然可以恢复出正常文本!
于是写了个小程序,从数据库查出乱码内容,再将其恢复成正常文本,最后写回数据库。

有时候降级不仅仅改个版本号那么简单,一些代码得跟着同步调整。

版权声明:本文为flashdelover原创文章,未经允许,请勿转载!

ISO-8859-1乱码恢复

标签:乱码   iso-8859-1   jquery   乱码恢复   

原文地址:http://blog.csdn.net/flashdelover/article/details/46694471

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!