هنگامی که در php یک آرایه از کاراکتر های فارسی داریم و می خواهیم آنرا serialize کنیم و در جایی ذخیره کنیم باید به صورت زیر عمل کنیم تا تابع serialize به درستی کار کند و داده به صورت صحیح تولید شود
$data = array('name' => 'مجید محمدیان');
$data = serialize($data);
$data = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {
return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
},$data );
بعد از این عملیات داده بصورت صحیح serialize می شود و می توانید با تابع unserialize آنرا بازگردانی کنید در غیر این صورت این تابع قادر به بازگردانی آن نخواهد شد و داده شما از دست خواهد رفت
من موضوع را نمی دانستم حال چه کنم؟
فرض کنید داده شما ذخیره شده است و دیگر کاری از دست شما بر نمی آید، مشکلی پیش نیامده، راه حل همینجاست.
$data = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {
return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
},$data );
$data = unserialize($data);
ولی به یاد داشته باشید پیشگیری بهتر از درمان است و شما قبل از اینکه داده را ذخیره نمایید آنرا به شکل درست ذخیره کنید.