能够反序列化序列化字符串

时间:2018-05-12 06:57:28

标签: php serialization

我有一个序列化的字符串,我试图反序列化它,但得到错误。

序列化字符串回显:

string(175) "a:6:{s:6:"tables";s:9:"8 Tables";s:8:"table_no";s:1:"6";s:6:"chairs";s:6:"Chairs";s:8:"chair_no";s:1:"6";s:12:"round_tables";s:11:"Round Table";s:14:"round_table_no";s:1:"6";}" 

数据库中的数据:

a:6:{s:6:"tables";s:9:"8 Tables";s:8:"table_no";s:1:"6";s:6:"chairs";s:6:"Chairs";s:8:"chair_no";s:1:"6";s:12:"round_tables";s:11:"Round Table";s:14:"round_table_no";s:1:"6";}

用于反序列化数据的代码

var_dump(unserialize($fellowship_data['equipment']));

在序列化并保存到数据库之前将数据发送到请求后

["equipment"]=>
  array(7) {
    ["tables"]=>
    string(9) "8' Tables"
    ["table_no"]=>
    string(1) "6"
    ["chairs"]=>
    string(6) "Chairs"
    ["chair_no"]=>
    string(1) "6"
    ["round_tables"]=>
    string(11) "Round Table"
    ["round_table_no"]=>
    string(1) "6"
    ["piping_drapes"]=>
    string(13) "Piping Drapes"
  }

进行序列化之前的代码

$equipment = array();
    if ( isset($_POST['equipment']) ){
        $equipment['tables'] = isset( $_POST['equipment']['tables'] ) ? str_replace("'","", $_POST['equipment']['tables']) : '';
        $equipment['table_no'] = isset( $_POST['equipment']['table_no'] ) ? $_POST['equipment']['table_no'] : '';
        $equipment['chairs'] = isset( $_POST['equipment']['chairs'] ) ? $_POST['equipment']['chairs'] : '';
        $equipment['chair_no'] = isset( $_POST['equipment']['chair_no'] ) ? $_POST['equipment']['chair_no'] : '';
        $equipment['round_tables'] = isset( $_POST['equipment']['round_tables'] ) ? $_POST['equipment']['round_tables'] : '';
        $equipment['round_table_no'] = isset( $_POST['equipment']['round_table_no'] ) ? $_POST['equipment']['round_table_no'] : '';
    }

序列化数据的代码

$equipment = serialize($equipment);

将其重新序列化,返回false

更新 我更改了代码并使用了json_encode和json_decode并将其存储在databsae中作为文本,现在json解码时我得到了NULL !!

任何人都可以告诉我如何解决它吗?

如果需要更多信息,请向我提问,以便我对这些问题进行补充。

注意: 我正在处理的服务器在其数据库中不支持json数据类型,因此我一定会使用序列化。我不建议人们关注它并使用serialize()进行保存。

1 个答案:

答案 0 :(得分:0)

我运行了您提供的示例代码,它正确地序列化数据。

预期结果

A

预期和结果之间的唯一区别是内容“8表”不是9个字符长。 您的原始输入(8'表格)实际上是9个字符长,字符'已滤除 我最好的猜测是你的输入用'字符序列化,你在序列化后将其过滤掉。

以下是我运行的代码段

B


使用JSON序列化数据

如果您决定使用json序列化数据,那么所需的代码实际上没有太大区别。
您使用“json_encode”就像“serialize”和“json_decode”类似于“unserialize”。关于decoding json data in php的最重要的注意事项是,您可以决定是否需要对象或关联数组。正如你想要一个数组,解码函数将是json_decode($ data, true )。

使用JSON的示例

string(175) "a:6:{s:6:"tables";s:8:"8 Tables";s:8:"table_no";s:1:"6";s:6:"chairs";s:6:"Chairs";s:8:"chair_no";s:1:"6";s:12:"round_tables";s:11:"Round Table";s:14:"round_table_no";s:1:"6";}"