jQueryでデータをシリアル化解除するにはどうすればよいですか?覚えておいてください。以下に例を示します。jQueryのシリアル化されていないデータをPHPでシリアル化
a:2:{i:0;s:9:" img1.jpeg";i:1;s:9:"img2.jpeg";}
jQueryでデータをシリアル化解除するにはどうすればよいですか?覚えておいてください。以下に例を示します。jQueryのシリアル化されていないデータをPHPでシリアル化
a:2:{i:0;s:9:" img1.jpeg";i:1;s:9:"img2.jpeg";}
これはunserialize
と
$unserialized = unserialize($serialized_from_db);
echo json_encode($unserialized);
json_encode
を使用して達成することができる。しかし注意してください、あなたのサンプルが提供さ:s:9:" img1.jpeg"
この部分が正しくありません。 s:9
は、文字列が9バイトであることを意味します(serialize
からの出力の理解には、このlinkが役立ちます)。" 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を参照し、動作します。
serialize
値ではなく、json_encode
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);
希望これは) `シリアル化を(使用しないでください
不正なシリアル化されたデータを修正しようとするハックを追加しました。 – alistaircol
を支援'、' json_encode() 'を使います。 –
@ AlexHowansky私はこのシリアル化されたデータをデータベースに保存しました。今私はjQueryを使用してデータのシリアル化を解除する必要があります。 –
phpでシリアル化解除し、json_encodeします。 –