2017-04-26 16 views
0

jQueryでデータをシリアル化解除するにはどうすればよいですか?覚えておいてください。以下に例を示します。jQueryのシリアル化されていないデータをPHPでシリアル化

a:2:{i:0;s:9:" img1.jpeg";i:1;s:9:"img2.jpeg";} 
+3

を支援'、' json_encode() 'を使います。 –

+0

@ AlexHowansky私はこのシリアル化されたデータをデータベースに保存しました。今私はjQueryを使用してデータのシリアル化を解除する必要があります。 –

+2

phpでシリアル化解除し、json_encodeします。 –

答えて

1

これは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); 

デモ:https://eval.in/783408

希望これは) `シリアル化を(使用しないでください

+0

不正なシリアル化されたデータを修正しようとするハックを追加しました。 – alistaircol

関連する問題