4

我在应用程序中使用 localStorage。

我正在使用 XOR 位移运算在数据进入存储之前对其进行屏蔽。

这是屏蔽功能:

    encrypt: function (str) {
        var encoded = [];

        if (!App.crypto.key) {
            App.crypto.init();
        }

        for (var i = 0, len = str.length; i < len; i++) {
            var a = str.charCodeAt(i);
            var b = a ^ App.crypto.key.charCodeAt(App.crypto.key % i);
            encoded.push(String.fromCharCode(b));
        }

        return encoded.join("");
    }

在这种情况下,我使用的密钥的值为“MWZ2cyt2N3JwejhxUjA2V3ptRmwxcmVvU09IbFhORHdOcDRiWGh5SGRZMFU4Ym9VY1Y1WXU5c2d6OXhBdU9wTSt1MlpqcmhXOVBRPQ0K”

当我在 IE9 中屏蔽“[]”时,我得到了一些奇怪的字符。当我尝试将其设置为 localStorage 时,它​​给了我一个无效的参数错误。有人知道发生了什么吗?

4

1 回答 1

7

IE(和 Edge,鉴于尚未重写)将 localStorage 存储为 XML,并禁止任何与XML 1.0 中的 Char 产生不匹配的字符;即,您可以存储“任何 Unicode 字符,不包括代理块、FFFE 和 FFFF”。

根据规范,这是一个错误:对于可以存储在 localStorage 中的内容应该没有限制(任何 ECMAScript 字符串都应该是可能的),尽管这个错误自 IE8 以来就存在。(在 IE8 预览版中,可能会通过存储不允许的字符之一来破坏 localStorage 后备存储,因为当它尝试解析 XML 文件时会出现解析错误!)

于 2012-05-08T19:16:22.473 回答