- preg_replace_callback: documentation ( source)
- unserialize: documentation ( source)
- var_export: documentation ( source)
<?php
$corrupted = <<<STRING
a:4:{i:0;s:3:"three";i:1;s:5:"five";i:2;s:2:"newline1
newline2";i:3;s:6:"garçon";}
STRING;
$repaired = preg_replace_callback(
'/s:(\d+):"(.*?)";/s',
function ($m) {
$len = strlen($m[2]);
return $m[1] == $len ? $m[0] : "s:$len:\"{$m[2]}\";";
},
$corrupted
);
echo $corrupted , "\n" , $repaired;
echo "\n---\n";
var_export(unserialize($repaired));