正则表达式/代码,用于修复损坏的序列化PHP数据。溶液:
2022-08-30 19:24:55
我有一个巨大的多维数组,已经被PHP序列化了。它已存储在MySQL中,数据字段不够大...末端已被切断...我需要提取数据... 不起作用...有没有人知道可以关闭所有数组的代码...重新计算字符串长度...手动完成的数据太多了。unserialize
非常感谢。
我有一个巨大的多维数组,已经被PHP序列化了。它已存储在MySQL中,数据字段不够大...末端已被切断...我需要提取数据... 不起作用...有没有人知道可以关闭所有数组的代码...重新计算字符串长度...手动完成的数据太多了。unserialize
非常感谢。
这是重新计算序列化数组中元素的长度:
$fixed = preg_replace_callback(
'/s:([0-9]+):\"(.*?)\";/',
function ($matches) { return "s:".strlen($matches[2]).':"'.$matches[2].'";'; },
$serialized
);
但是,如果字符串包含 .,则它不起作用。在这种情况下,无法自动修复序列化数组字符串 - 需要手动编辑。";
1)在线试用:
2)使用功能:
unserialize(
serialize_corrector(
$serialized_string ) ) ;
法典:
function serialize_corrector($serialized_string){
// at first, check if "fixing" is really needed at all. After that, security checkup.
if ( @unserialize($serialized_string) !== true && preg_match('/^[aOs]:/', $serialized_string) ) {
$serialized_string = preg_replace_callback( '/s\:(\d+)\:\"(.*?)\";/s', function($matches){return 's:'.strlen($matches[2]).':"'.$matches[2].'";'; }, $serialized_string );
}
return $serialized_string;
}
还有这个脚本,我还没有测试过。