Skip to main content

PHP序列化数据修复

描述

在php中使用serialize和unserialize函数对数据进行序列号和反序列化的时候,可能会发现反序列化失败了,可能是因为编码不同导致的。

在通过serialize对数据进行序列化的时候,序列化的结果受当前环境的字符编码影响。在不同的开发环境中如果编码不一致,可能导致无法成功反序列化。

解决方案

下面代码可以通过正则匹配序列化数据中的字符串,并且重新计算字符串的长度。修复错误的数据,修复之后就可以成功反序列化了。

<?php 
$new_content = preg_replace_callback( '|s:(\d+):"(.*?)";|s', function($match) {
return sprintf('s:%d:"%s";', strlen($match[2]), $match[2]);
}, $content );