Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Membetulkan Ralat 'unserialize(): Error at offset' dalam Rentetan Bersiri yang rosak?

Bagaimanakah Saya Boleh Membetulkan Ralat 'unserialize(): Error at offset' dalam Rentetan Bersiri yang rosak?

Patricia Arquette
Lepaskan: 2024-12-14 06:28:14
asal
681 orang telah melayarinya

How Can I Fix

Membaiki Rentetan Bersiri yang Rosak: Menyelesaikan Ralat Kiraan Bait Tidak Sah

Masalah:

Anda mengalami ralat "unserialize( ) [function.unserialize]: Ralat pada offset" semasa cuba nyahsiri rentetan bersiri yang rosak. Ralat ini menunjukkan bahawa rentetan mengandungi panjang kiraan bait yang tidak sah, mengakibatkan pemangkasan data.

Punca:

Data bersiri tidak sah disebabkan pengiraan panjang elemen yang salah.

Cepat Betulkan:

Kira Semula Panjang Elemen: Kira panjang sebenar setiap elemen bersiri dan kemas kini nilai kiraan bait yang sepadan.

Sebagai contoh, pertimbangkan bersiri berikut rentetan:

$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";}';
Salin selepas log masuk

Gunakan kod berikut untuk mengira semula dan membetulkan elemen panjang:

$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Salin selepas log masuk

Pastikan Petikan yang Betul: Gunakan petikan tunggal (') dan bukannya petikan berganda (") apabila memberikan nilai kepada elemen bersiri, kerana yang terakhir boleh menyebabkan pemangkasan yang tidak dijangka.

Tambahan Langkah berjaga-jaga:

  • Tambah garis miring pada nilai menggunakan addslashes() sebelum bersiri untuk mengelakkan serangan suntikan SQL.
  • Enkodkan aksara UTF-8 menggunakan utf8_encode() untuk keserasian merentas platform .
  • Pertimbangkan untuk menggunakan base64_encode() dan base64_decode() untuk penyimpanan pangkalan data yang lebih selamat dan mendapatkan semula data bersiri.

Kesan Ralat Pensirian pada Masa Hadapan:

Fungsi berikut boleh digunakan untuk mengenal pasti elemen perbezaan panjang dan membantu mencari punca rasuah:

function findSerializeError($data1) {
    // ... (code omitted for brevity)
}
Salin selepas log masuk

Dengan menggunakan fungsi ini, anda boleh menganalisis data yang rosak, mengenal pasti elemen yang bermasalah dan membetulkannya dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membetulkan Ralat 'unserialize(): Error at offset' dalam Rentetan Bersiri yang rosak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan