如何在jQuery中反序列化數據?記住數據是由PHP序列化的。下面舉例說明。jQuery反序列化PHP序列化的數據
a:2:{i:0;s:9:" img1.jpeg";i:1;s:9:"img2.jpeg";}
如何在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
希望這有助於
我添加了一個黑客來嘗試修復你的不好的序列化數據。 – alistaircol
不要使用'序列化() ',使用'json_encode()'。 –
@ AlexHowansky我將這個序列化的數據保存在數據庫中。現在我想通過使用jQuery來反序列化數據。 –
在php中反序列化它,然後json_encode它。 –