Если неизвестно, в какой кодировке исходная строка — можно воспользоваться встроенной функцией PHP
mb_detect_encoding ($string);
есть мнение, что она не всегда корректно работает, но отличить UTF-8 от не UTF-8 она сможет.. Допуская, что “не-UTF-8″ это 1251 /как правило,именно так и есть на большинстве сайтов рунета, с которыми приходилось иметь дело*/) — вполне рабочий вариант
Решение в общем-то простое, после определения кодировок.. Использовать конвертацию из UTF-8 в WINDOWS-1251 и обратно для сериализованной строки.. а затем, (если нужна другая кодировка) элементы массива (строки или строковые поля объектов) конвертировать обратно..
$serialize_cp1251 = iconv('utf-8','windows-1251',$serialize_utf8); $unserialize_cp1251 = unserialize($serialize_cp1251);
// теперь в $unserialize_cp1251 массив/объект, у которого строки в кодировке 1251 // по идее неплохо бы обойти рекурсивной функцией, которая преобразует все // строковые поля из одной кодировки в другую.