Javascript中反序列化数组


Unserialise array in Javascript

你好,我试图在javascript中使用PHPunserialize模块反序列化这个数组:

a:7:{s:13:"varPertinence";a:4:{i:0;s:5:"REGLT";i:1;s:2:"13";i:2;s:2:"15";i:3;s:2:"16";}s:10:"varSegment";N;s:12:"varSSegment1";N;s:12:"varSSegment2";N;s:7:"varVoie";N;s:4:"ingr";s:7:"cafaccentxA9ine";s:2:"mc";N;}

,我得到了这个错误:

Unknown key type 'x' at position 192

在Php中,下面的表达式可以解决这个问题:

$myvar = preg_replace('!s:('d+):"(.*?)";!e', "'s:'.strlen('$2').':'"$2'";'",  $myvar ); 

这是我在js中尝试的:

myvar = myvar.replace(!s:('d+):"(.*?)";!e, "'s:'.$2.length.':'"$2'";'");

这个转换正确吗?

你对这个错误有什么想法吗?

这是一个工作示例(成功反序列化)

a:7:{s:13:"varPertinence";N;s:10:"varSegment";a:3:{i:0;s:2:"21";i:1;s:1:"7";i:2;s:2:"12";}s:12:"varSSegment1";N;s:12:"varSSegment2";N;s:7:"varVoie";N;s:4:"ingr";s:6:"citrus";s:2:"mc";N;}

谢谢

Edit:这是两个错误产生的函数(unserialize模块):

readType = function () {
      var type = phpstr.charAt(idx);
      idx += 2;
      return type;
    } //end readType
  , readKey = function () {
      var type = readType();
      switch (type) {
        case 'i': return readInt();
        case 's': return readString();
        default:
          throw {
            name: "Parse Error",
            message: "Unknown key type '" + type + "' at position " +
                (idx - 2)
          };
      } //end switch
    }

不序列化的问题来自于特殊字符:

我犯的错误是用正确的格式替换那些字符:é : 'u00e9

但是我忘了在反序列化之前更新字符串的长度(添加长度(''u00e9')-1(-1表示替换的字符)

感谢大家的宝贵时间和帮助