Rumah php教程 php手册 php中unserialize返回false的解决方法

php中unserialize返回false的解决方法

Jun 06, 2016 pm 08:19 PM
false php unserialize Penyelesaian kembali

这篇文章主要介绍了php中unserialize返回false的解决方法,是PHP程序设计中非常经典的问题,需要的朋友可以参考下

本文实例讲述了php中unserialize返回false的解决方法,分享给大家供大家参考。具体方法如下:

php 提供serialize(序列化) 与unserialize(反序列化)方法。
使用serialize序列化后,再使用unserialize反序列化就可以获取原来的数据。

先来看看如下程序实例:

'fdipzone', 'gender' => 'male' ); $str = serialize($arr); //序列化 echo 'serialize str:'.$str."\r\n\r\n"; $content = unserialize($str); // 反序列化 echo "unserialize str:\r\n"; var_dump($content); ?>

输出:

serialize str:a:2:{s:4:"name";s:8:"fdipzone";s:6:"gender";s:4:"male";} unserialize str: array(2) { ["name"]=> string(8) "fdipzone" ["gender"]=> string(4) "male" }

但下面这个例子反序列化会返回false

检查序列化后的字符串,发现出问题是在两处地方:

s:5:"url"
s:29:"http://www.baidu.com/test.html"
这两处应为
s:3:"url"
s:30:"http://www.baidu.com/test.html"

出现这种问题的原因是序列化数据时的编码与反序列化时的编码不一致导致,例如数据库是latin1和UTF-8字符长度不一样。
另外有可能出问题的还有单双引号,ascii字符"\0"被解析为 '\0',,\0在C中是字符串的结束符等于chr(0),错误解析后算了2个字符。
\r在计算长度时也会出问题。

解决方法如下:

// utf8 function mb_unserialize($serial_str) { $serial_str= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str ); $serial_str= str_replace("\r", "", $serial_str); return unserialize($serial_str); } // ascii function asc_unserialize($serial_str) { $serial_str = preg_replace('!s:(\d+):"(.*?)";!se', '"s:".strlen("$2").":\"$2\";"', $serial_str ); $serial_str= str_replace("\r", "", $serial_str); return unserialize($serial_str); }

例子:

echo ''; // utf8 function mb_unserialize($serial_str) { $serial_str= preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $serial_str ); $serial_str= str_replace("\r", "", $serial_str); return unserialize($serial_str); } $str = 'a:9:{s:4:"time";i:1405306402;s:4:"name";s:6:"新晨";s:5:"url";s:1:"-";s:4:"word";s:1:"-";s:5:"rpage";s:29:"http://www.baidu.com/test.html";s:5:"cpage";s:1:"-";s:2:"ip";s:15:"117.151.180.150";s:7:"ip_city";s:31:"中国北京市 北京市移动";s:4:"miao";s:1:"5";}'; var_dump(unserialize($str)); // false var_dump(mb_unserialize($str)); // 正确

使用处理过单双引号,过滤\r的mb_unserialize方法就能成功反序列化了。

使用unserialize:

bool(false) 
 
使用mb_unserialize

array(9) { ["time"]=> int(1405306402) ["name"]=> string(6) "新晨" ["url"]=> string(1) "-" ["word"]=> string(1) "-" ["rpage"]=> string(30) "http://www.baidu.com/test.html" ["cpage"]=> string(1) "-" ["ip"]=> string(15) "117.151.180.150" ["ip_city"]=> string(31) "中国北京市 北京市移动" ["miao"]=> string(1) "5" }

希望本文所述对大家PHP程序设计的学习有所帮助。

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah pemalsuan permintaan lintas tapak (CSRF) dan bagaimana anda melaksanakan perlindungan CSRF di PHP? Apakah pemalsuan permintaan lintas tapak (CSRF) dan bagaimana anda melaksanakan perlindungan CSRF di PHP? Apr 07, 2025 am 12:02 AM

Dalam PHP, anda boleh mencegah serangan CSRF dengan menggunakan token yang tidak dapat diramalkan. Kaedah khusus termasuk: 1. Menjana dan membenamkan token CSRF dalam bentuk; 2. Sahkan kesahihan token semasa memproses permintaan.

Bagaimanakah anda dapat mengelakkan kelas daripada dilanjutkan atau kaedah yang ditindas dalam PHP? (kata kunci akhir) Bagaimanakah anda dapat mengelakkan kelas daripada dilanjutkan atau kaedah yang ditindas dalam PHP? (kata kunci akhir) Apr 08, 2025 am 12:03 AM

Dalam PHP, kata kunci akhir digunakan untuk mencegah kelas daripada diwarisi dan kaedah ditimpa. 1) Apabila menandakan kelas sebagai muktamad, kelas tidak boleh diwarisi. 2) Apabila menandakan kaedah sebagai muktamad, kaedah itu tidak boleh ditulis semula oleh subkelas. Menggunakan kata kunci akhir memastikan kestabilan dan keselamatan kod anda.

Tidak dapat log masuk ke mysql sebagai akar Tidak dapat log masuk ke mysql sebagai akar Apr 08, 2025 pm 04:54 PM

Sebab utama mengapa anda tidak boleh log masuk ke MySQL sebagai akar adalah masalah kebenaran, ralat fail konfigurasi, kata laluan tidak konsisten, masalah fail soket, atau pemintasan firewall. Penyelesaiannya termasuk: periksa sama ada parameter pengikat di dalam fail konfigurasi dikonfigurasi dengan betul. Semak sama ada kebenaran pengguna root telah diubahsuai atau dipadam dan ditetapkan semula. Sahkan bahawa kata laluan adalah tepat, termasuk kes dan aksara khas. Semak tetapan dan laluan kebenaran fail soket. Semak bahawa firewall menyekat sambungan ke pelayan MySQL.

Terangkan jenis yang ketat (mengisytiharkan (strict_types = 1);) dalam php. Terangkan jenis yang ketat (mengisytiharkan (strict_types = 1);) dalam php. Apr 07, 2025 am 12:05 AM

Jenis yang ketat dalam PHP didayakan dengan menambah mengisytiharkan (strict_types = 1); di bahagian atas fail. 1) Ia memaksa jenis pemeriksaan parameter fungsi dan pulangan nilai untuk mengelakkan penukaran jenis tersirat. 2) Menggunakan jenis yang ketat dapat meningkatkan kebolehpercayaan dan kebolehprediksi kod, mengurangkan pepijat, dan meningkatkan kebolehkerjaan dan kebolehbacaan.

Bagaimana cara mengeluarkan gaya lalai dalam senarai bootstrap? Bagaimana cara mengeluarkan gaya lalai dalam senarai bootstrap? Apr 07, 2025 am 10:18 AM

Gaya lalai senarai bootstrap boleh dikeluarkan dengan mengatasi CSS. Gunakan peraturan dan pemilih CSS yang lebih spesifik, ikuti "Prinsip Jarak" dan "Prinsip Berat", mengatasi gaya lalai bootstrap. Untuk mengelakkan konflik gaya, lebih banyak pemilih yang disasarkan boleh digunakan. Sekiranya penindasan tidak berjaya, laraskan berat CSS adat. Pada masa yang sama, perhatikan pengoptimuman prestasi, elakkan terlalu banyak! Penting, dan tulis kod CSS ringkas dan cekap.

Cara menggunakan lalai eksport di Vue Cara menggunakan lalai eksport di Vue Apr 07, 2025 pm 07:21 PM

Eksport Lalai di Vue mendedahkan: Eksport lalai, mengimport keseluruhan modul pada satu masa, tanpa menentukan nama. Komponen ditukar menjadi modul pada masa kompilasi, dan modul yang tersedia dibungkus melalui alat binaan. Ia boleh digabungkan dengan eksport yang dinamakan dan mengeksport kandungan lain, seperti pemalar atau fungsi. Soalan -soalan yang sering ditanya termasuk kebergantungan bulat, kesilapan laluan, dan membina kesilapan, yang memerlukan pemeriksaan yang teliti terhadap kod dan penyataan import. Amalan terbaik termasuk segmentasi kod, kebolehbacaan, dan penggunaan semula komponen.

Apa yang Perlu Dilakukan Sekiranya Jadual Bootstrap Menggunakan Ajax untuk mendapatkan data yang dihiasi Apa yang Perlu Dilakukan Sekiranya Jadual Bootstrap Menggunakan Ajax untuk mendapatkan data yang dihiasi Apr 07, 2025 am 11:54 AM

Penyelesaian ke Jadual Bootstrap Kod Garbled Apabila menggunakan AJAX untuk mendapatkan data dari pelayan: 1. Tetapkan pengekodan aksara yang betul dari kod pelayan (seperti UTF-8). 2. Tetapkan tajuk Permintaan dalam permintaan AJAX dan tentukan pengekodan aksara yang diterima (terima-charset). 3. Gunakan penukar "Unescape" jadual bootstrap untuk menyahkod entiti HTML yang melarikan diri ke dalam aksara asal.

Adakah imej berpusat imej mengezum imej? Adakah imej berpusat imej mengezum imej? Apr 07, 2025 am 07:42 AM

Cara Mencapai Pusat Imej dan Penskalaan di Bootstrap: Gunakan D-Flex Justify-Content-Center untuk memusatkan imej secara mendatar. Gunakan Align-item-center dan ketinggian elemen induk tetap secara menegak memusatkan imej. Gunakan atribut lebar dan ketinggian untuk mengawal saiz imej, atau gunakan ketinggian maksimum dan ketinggian max untuk mengehadkan saiz maksimum. Gunakan kelas IMG-cecair atau mekanisme reka bentuk responsif, seperti pertanyaan media, untuk mencapai skala responsif. Mengoptimumkan saiz imej, mengawal pengukuran menggunakan atribut yang sesuai dengan objek, dan ikuti amalan terbaik untuk memastikan prestasi dan penyelenggaraan.

See all articles