标签:乱码 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 jquery 乱码恢复
原文地址:http://blog.csdn.net/flashdelover/article/details/46694471