Php Unserialize İşleminde Özel Karakter Hatası
Çok denk geleceğiniz bir hata olmamakla birlikte denk geldiğinizde sizi baya uğraştırabilir. Zamanında bizde çok uğraştık ve bir çözüm yolunu bulduk sizlerle paylaşmak istedik. Önce bu hata neden olur onu açıklayalım; serialize işleminde özel karakter veya utf-8 olmayan karakterler kullanıp işlem yaparsanız bu karakterlerin serialize işleminde hesaplaması farklı yapılıp dizgi oluşturulur. Oluşturulan bu dizgi normal bir hesaplama olmadığı için unserialize işleminde dizgiyi doğru şekilde açamaz. Aşağıdaki fonksiyon ise preg_replace_callback fonksiyonun yardımı ile hesaplamayı doğru şekilde yapıp dizgiyi yeniden düzenler böylece unserialize işlemindeki sorun giderilmiş olur.
<?php
function mb_unserialize($string) {
$string = preg_replace_callback(
'!s:(\d+):"(.*?)";!s',
function ($matches) {
if ( isset( $matches[2] ) )
return 's:'.strlen($matches[2]).':"'.$matches[2].'";';
},
$string;
);
return unserialize($string);
}
?>