Ada kemungkinan ralat "unserialize() [function.unserialize]: Ralat pada offset" disebabkan oleh rentetan bersiri tidak sah kerana panjang kiraan bait yang salah.
Untuk menyelesaikan isu ini, kami perlu mengira semula panjang elemen dalam tatasusunan bersiri. Berikut ialah contoh menggunakan data yang disediakan:
$data = 'a:10:{s:16:"submit_editorial";b:0;s:15:"submit_orig_url";s:13:"www.bbc.co.uk";s:12:"submit_title";s:14:"No title found";s:14:"submit_content";s:12:"dnfsdkfjdfdf";s:15:"submit_category";i:2;s:11:"submit_tags";s:3:"bbc";s:9:"submit_id";b:0;s:16:"submit_subscribe";i:0;s:15:"submit_comments";s:4:"open";s:5:"image";s:19:"C:fakepath100.jpg";}'; $data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Selepas mengira semula panjang, kami kini boleh menyahsiri data tanpa ralat:
var_dump(unserialize($data));
Output:
array 'submit_editorial' => boolean false 'submit_orig_url' => string 'www.bbc.co.uk' (length=13) 'submit_title' => string 'No title found' (length=14) 'submit_content' => string 'dnfsdkfjdfdf' (length=12) 'submit_category' => int 2 'submit_tags' => string 'bbc' (length=3) 'submit_id' => boolean false 'submit_subscribe' => int 0 'submit_comments' => string 'open' (length=4) 'image' => string 'C:fakepath100.jpg' (length=17)
Walau bagaimanapun, ini hanyalah penyelesaian pantas. Untuk mengelakkan isu bersiri pada masa hadapan, adalah penting untuk memastikan bahawa data asal disiri dengan betul dengan kiraan bait yang betul. Anda boleh melakukannya dengan menggunakan kaedah bersiri yang betul seperti:
$serializedData = serialize($data);
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan 'unserialize(): Ralat pada offset' Disebabkan oleh Panjang Kiraan Bait Tidak Sah dalam Rentetan Bersiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!