jQuery反序列化PHP序列化的数据
问题描述:
如何在jQuery中反序列化数据?记住数据是由PHP序列化的。下面举例说明。jQuery反序列化PHP序列化的数据
a:2:{i:0;s:9:" img1.jpeg";i:1;s:9:"img2.jpeg";}
答
这可以通过使用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。您可以添加一个检查,看看这failes反序列化:
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);
演示在这里:https://eval.in/783408
希望这有助于
+0
我添加了一个黑客来尝试修复你的不好的序列化数据。 – alistaircol
不要使用'序列化() ',使用'json_encode()'。 –
@ AlexHowansky我将这个序列化的数据保存在数据库中。现在我想通过使用jQuery来反序列化数据。 –
在php中反序列化它,然后json_encode它。 –