• ISO-8859-1乱码恢复


    为兼容较旧的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("一直想买一个,可惜没有米啊•Š"))

    居然能够恢复出正常文本!


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

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

  • 相关阅读:
    Attributes.Add用途与用法
    Reapter控件中更换Td背景色
    SQL SERVER查询时间条件式写法
    C# Cache何时使用及使用方法
    C#中Cache用法
    用sql语句将两个时间相减,得到时间距的DateDiff()函数
    HTML5 带进度条的异步文件上传原理
    Node环境Grunt开发流
    HTML5的Web SQL Databases(html5 本地数据库)API
    移动端范围拖动选择效果
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5123907.html
Copyright © 2020-2023  润新知