你好,我试图在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表示替换的字符)
感谢大家的宝贵时间和帮助