Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Membaiki Ralat Tidak Padan Panjang Sirialisasi PHP?

Bagaimana untuk Membaiki Ralat Tidak Padan Panjang Sirialisasi PHP?

Mary-Kate Olsen
Lepaskan: 2024-12-19 22:21:10
asal
919 orang telah melayarinya

How to Repair PHP Serialization Length Mismatch Errors?

Menggunakan PHP Serialisasi Panjang Tidak Padan? Begini Cara Membaikinya

Masalah:

Apabila menggunakan fungsi unserialize() PHP pada rentetan bersiri, anda menghadapi ralat:

unserialize() [function.unserialize]: Error at offset
Salin selepas log masuk

Punca:

Ralat ini biasanya disebabkan oleh panjang kiraan bait tidak betul dalam rentetan bersiri, mengakibatkan data tidak sah.

Penyelesaian:

Untuk membetulkannya, anda boleh mengira semula panjang elemen tatasusunan bersiri seperti berikut :

  1. Gunakan preg_replace() untuk mengubah suai data bersiri, mengira semula panjang:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Salin selepas log masuk
  1. Sekarang, unserialize seharusnya memproses data yang diperbetulkan tanpa ralat.

Mencegah Isu Masa Depan:

1. Sahkan Data Bersiri:

Gunakan fungsi seperti findSerializeError() untuk mengenal pasti dan mengesan ralat dalam segmen data bersiri.

2. Kaedah Storan Alternatif:

Untuk storan yang lebih selamat dan boleh dipercayai, pertimbangkan untuk menggunakan pengekodan dan penyahkodan base64 untuk menyimpan dan mendapatkan semula data bersiri. Ini memastikan pengendalian bait dan aksara yang betul.

Contoh:

// Save to database
$toDatabase = base64_encode(serialize($data));

// Retrieve from database
$fromDatabase = unserialize(base64_decode($data));
Salin selepas log masuk

Petua Tambahan:

  • Pastikan penggunaan petikan tunggal dan berganda yang betul dalam data bersiri.
  • Pertimbangkan untuk menggunakan sanitasi berfungsi seperti addslashes() sebelum bersiri untuk mengendalikan aksara khas.
  • Gunakan array_walk() untuk menggunakan fungsi sanitasi secara rekursif pada elemen tatasusunan.
  • Untuk aksara UTF, gunakan array_map("utf8_encode", $ array) sebelum bersiri dan array_map("utf8_decode", $array) sebelum ini penyahsiran.

Atas ialah kandungan terperinci Bagaimana untuk Membaiki Ralat Tidak Padan Panjang Sirialisasi PHP?. 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