正则表达式/代码来修复损坏的序列化PHP数据

问题描述

我认为这几乎是不可能的。在修理阵列之前,您需要知道阵列是如何损坏的。有多少孩子失踪?内容是什么?

对不起,恕我直言,你做不到。

证明:

<?php

$serialized = serialize(
    [
        'one'   => 1,
        'two'   => 'nice',
        'three' => 'will be damaged'
    ]
);

var_dump($serialized); // a:3:{s:3:"one";i:1;s:3:"two";s:4:"nice";s:5:"three";s:15:"will be damaged";}

var_dump(unserialize('a:3:{s:3:"one";i:1;s:3:"two";s:4:"nice";s:5:"tee";s:15:"will be damaged";}')); // please note 'tee'

var_dump(unserialize('a:3:{s:3:"one";i:1;s:3:"two";s:4:"nice";s:5:"three";s:')); // serialized string is truncated

链接:https//ideone.com/uvISQu

即使可以重新计算键/值的长度,也不能信任从此源检索到的数据,因为您不能重新计算键/值的值。例如。如果序列化的数据是对象,那么您的属性将不再可用。

解决方法

我有一个庞大的多维数组,已被PHP序列化。它已存储在MySQL中,并且数据字段不够大…末端已被切断…我需要提取数据…
unserialize无法正常工作…有谁知道可以关闭的代码所有数组…重新计算字符串长度…手工处理的数据太多。

非常感谢。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...