問題:
您遇到錯誤“unserialize( ) [function.unserialize]: 嘗試時在偏移處出錯”反序列化損壞的序列化字串。此錯誤表示字串包含無效的位元組數長度,導致資料被截斷。
原因:
由於元素長度計算不正確,導致序列化資料無效。
快點修正:
重新計算元素長度:計算每個序列化元素的實際長度並更新對應的位元組計數值。
例如,考慮以下序列化string:
$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);
確保正確引用:在為序列化元素賦值時使用單引號(') 而不是雙引號("),因為後者可能會導致意外截斷。
額外注意事項:
以上是如何修復損壞的序列化字串中的'unserialize(): Error at offset”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!