如何在jQuery中反序列化数据?记得数据是由PHP序列化的。下面给出了示例。
a:2:{i:0;s:9:" img1.jpeg";i:1;s:9:"img2.jpeg";}
答案 0 :(得分:1)
可以使用unserialize
和json_encode
$unserialized = unserialize($serialized_from_db);
echo json_encode($unserialized);
但请注意您提供的样本:s:9:" img1.jpeg"
此部分不正确。 s:9
表示它期望字符串为9个字节(这个link提供了理解serialize
输出的良好指南,但是" img1.jpeg
有一个空格,因此是10个字节并失败:demo failing。您可以添加一个检查以查看是否易于反序列化:
if ($unserialized === false)
将错误的部分修复为:s:9:"img1.jpeg
时,为您提供:
a:2:{i:0;s:9:"img1.jpeg";i:1;s:9:"img2.jpeg";}
现在可以使用,请参阅demo。
在一天结束时,我建议像其他人一样,在您的数据库中存储json_encode
d值,而不是serialize
d值。
我提出了一个非常糟糕的黑客攻击来修复错误的序列化数据:
<?php
function hackFixUnserialized($unserialized_string) {
$parts = explode(';', $unserialized_string);
foreach ($parts as &$part) {
$kv = explode(':', $part);
if ($kv[0] == 's') {
$str_without_quotes = str_replace('"', '', $kv[2]);
if ($kv[1] != strlen($str_without_quotes)) {
$kv[1] = strlen($str_without_quotes);
}
}
$part = implode(':', $kv);
}
return implode(';', $parts);
}
$unserialized_from_db = <<<EOT
a:2:{i:0;s:9:" img1.jpeg";i:1;s:9:"img2.jpeg";}
EOT;
$unserialized = unserialize($unserialized_from_db);
if ($unserialized === false) {
$hack_fix = hackFixUnserialized($unserialized_from_db);
printf('bad unserialized, fixed to: %s%s', $hack_fix, PHP_EOL);
$unserialized = unserialize($hack_fix);
}
echo json_encode($unserialized);
希望这有帮助