$widgets = \App\Models\Widgets::all()->toArray();
foreach ($widgets as &$widget) {
try {
$raw = $widget['widget_content'];
// Fix broken serialized string lengths (especially for UTF-8)
$fixed = preg_replace_callback(
'!s:(\d+):"(.*?)";!s',
function ($m) {
return 's:' . strlen($m[2]) . ':"' . $m[2] . '";';
},
$raw
);
$data = @unserialize($fixed);
if ($data !== false && is_array($data)) {
$widget['widget_content'] = $data;
} else {
\Log::warning("Unserialization failed at widget ID {$widget['id']} — raw string may still be corrupted.");
$widget['widget_content'] = [];
}
} catch (\Throwable $e) {
\Log::error("Error unserializing widget ID {$widget['id']}: " . $e->getMessage());
$widget['widget_content'] = [];
}
}