是否有正则表达式验证PHP序列化的数据?

时间:2016-11-02 17:56:26

标签: php mysql regex serialization

我有一个大型数据库,其中包含大量无效的序列化数据。

数据由PHP序列化,并且在每种情况下都是反序列化失败,其中一个值的字符串长度关闭。

k

我想将所有序列化数据导出为CSV,找到所有损坏的字段,然后修复或删除它们。

我认为这可以用正则表达式完成...对于每一行找到每个s:[length],检查下一个冒号后的引用值是否等于数字[length]。如果长度不匹配则返回整行。

非常感谢任何帮助。如果你能提供一个返回序列化数据破碎行的mysql查询,那就超级好了。

1 个答案:

答案 0 :(得分:2)

这可能会被清理一下,但有效:

$result = preg_replace_callback('/s:\d+:"([^"]+)"/',
                                function($m) {
                                    return 's:'.strlen($m[1]).':"'.$m[1].'"';
                                }, $string);
  • 匹配字符串组件
  • 将长度组件替换为匹配字符串的strlen()

在MySQL方面,您可以尝试mysql-udf-regexp