PHP.js unserialize() error IE7



我尝试使用php.js.的序列化包将要通过php保存到文件中的对象数据序列化

铬:很好FF:好IE9:好兼容模式下的IE9(本质上是IE7):不好。

控制台错误:

SCRIPT5022: Exception thrown and not caught 
serialize.min.js, line 144 character 55

序列化的数据基本上看起来是这样的:

a:180:{s:40:"Aleksis Kiven tie 15<br>04200 Kerava<br>";a:2:{i:0;d:60.4012598;i:1;d:25.09659910000005;}

未序列化:

{"Aleksis Kiven tie 15<br>04200 Kerava<br>": [60.4012598, 25.09659910000005]}

处理缓存的Javascript如下所示:

function saveCache(data) {
    sdata = serialize(data);
    $.ajax({
        type: 'POST',
        url: 'http://localhost/foobar/files/coordinates.php',
        data: {
            'do': 'write',
            'data': sdata
        }
    });
}

我正在按地址将地理编码结果缓存到一个文本文件中。

如果我说不通,请多问。

主要编辑:我纠正了所指出的例子。同样重要的是,这个问题真的发生了变化;这实际上不是serialize()的问题,而是unserialize(,)的问题。

毕竟是我自己想出来的。

当我仔细查看时,导致错误的并不是serialize(),而是与我在同一个包中的unserialize(

在某个时候,缓存损坏了,出于某种原因,comp模式下的IE9是我测试过的浏览器中唯一不容忍它的浏览器。缓存损坏的原因是堆叠utf8_encoodes/decodes,开始把事情搞砸。

事情是这样的:

  • 缓存是使用serialize()构建和序列化的。一切都好
  • PHP检查数据是否真的是UTF-8,并相应地执行utf8_encode。保存数据。一切都好
  • 下一页加载。PHP使用AJAX返回存储的数据。发送UTF-8标头只是为了以防万一。数据将被取消序列化()并进行相应处理。一切都好
  • 缓存可能会使用新内容和serialize()d进行更新。提醒序列化数据会产生一个惊喜:汉字和腐败取代了åäö

解决方案在于unserialize()执行不必要的utf8_decode()。页面为UTF-8。我所有的javascript文件都是UTF-8。缓存的数据被多次确定为UTF-8。因此,不存在也没有任何理由解码UTF-8。我不能100%确定到底是如何删除数据的,但注释掉utf8_decode解决了这个问题。

我对现代浏览器的容错能力有点失望。它太高了。但好的是,我想通了。

相关内容

  • 没有找到相关文章

最新更新