php中unserialize返回false的解决方法,unserializefalse_PHP教程
php中unserialize返回false的解决方法,unserializefalse
本文实例讲述了php中unserialize返回false的解决方法,分享给大家供大家参考。具体方法如下:
php 提供serialize(序列化) 与unserialize(反序列化)方法。
使用serialize序列化后,再使用unserialize反序列化就可以获取原来的数据。
先来看看如下程序实例:
<?php $arr = array( 'name' => '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
<?php
$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)); // bool(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 '<meta http-equiv="content-type" content="text/html; charset=utf-8">';
// 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程序设计的学习有所帮助。
返回false说明你的数据有问题,查询一下你的储存数据是否格式正确。
这是编码的问题,数据库的编码和PHP文件的编码不一致。
你打印出来文本,经过复制黏贴,其实就是一次编码转换了。
Heiße KI -Werkzeuge
Undress AI Tool
Ausziehbilder kostenlos
Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos
AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.
Clothoff.io
KI-Kleiderentferner
Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!
Heißer Artikel
Heiße Werkzeuge
Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor
SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen
Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung
Dreamweaver CS6
Visuelle Webentwicklungstools
SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)
Was sind öffentlich, privat und in PHP geschützt
Aug 24, 2025 am 03:29 AM
Auf öffentliche Mitglieder können nach Belieben zugegriffen werden. 2. private Mitglieder können nur innerhalb der Klasse zugegriffen werden. 3.. Geschützte Mitglieder können in Klassen und Unterklassen zugegriffen werden. 4. Die rationale Verwendung kann die Sicherheit und die Wartbarkeit der Code verbessern.
So führen Sie eine Update -Abfrage in PHP aus
Aug 24, 2025 am 05:04 AM
Mithilfe von mySQLI-objektorientierter Methode: Erstellen Sie eine Verbindung, Vorprozess-Update-Anweisungen, binden Sie Parameter, führen Sie die Ergebnisse aus und überprüfen Sie sie schließlich die Ressource. 2. Mithilfe der MySQLI -Prozedurmethode: Verbindung mit der Datenbank über Funktionen herstellen, Anweisungen vorbereiten, Parameter binden, Aktualisierungen durchführen und die Verbindung nach Verarbeitungsfehlern schließen. 3.. Verwenden Sie PDO: Stellen Sie eine Verbindung zur Datenbank über PDO ein, setzen Sie den Ausnahmemodus, stellen Sie SQL vor, binden Sie Parameter, führen Sie Aktualisierungen durch, verwenden Sie Try-Catch, um Ausnahmen zu verarbeiten und schließlich Ressourcen zu veröffentlichen. Verwenden Sie immer Vorverarbeitungsanweisungen, um die SQL -Injektion zu verhindern, die Benutzereingabe zu überprüfen und Verbindungen in der Zeit zu schließen.
So verwenden Sie Curl in PHP
Aug 24, 2025 am 08:32 AM
CurlinphpenablessendingHttprequests, Fetchingapidata, AnduploadingFiles.initializewithcurl_init (), setOptionslikecurlopt_urlandc URLOPT_RETURNTRANSFER, Usecurlopt_PostForpostrequests, SendjsonwithProperHeaders, HandleErrorsViacurl_errno () undhttpcodesWithCur
Wie lese ich eine CSV -Datei in PHP?
Aug 29, 2025 am 08:06 AM
ToreadacsvFileInphp, UseFopen () toopenthefile, fGetCSV () inaloopToreAdeachRowasanarray und FCLOSE () tocloseeit; HandhaderswithaseparatefgetCsv () CallandSpecifyDelimitersAsNeeded, zweifelnde und -ProperepathSandutf-8coding -SpectorpatherpathSandutf-8Coding -SpectorpatherpathSandutf-8Coding-Spuren,
So verwenden Sie AJAX mit PHP
Aug 29, 2025 am 08:58 AM
AjaxWithPhenablesDynamicWebAppsbyendingAsynchronousRequestswitHoutpageroads.1.CreatehtmlwithjavaScriptUSUtfetch () tosendd ata.2.buildaphpScripttoprocessPostDataAndRetReturnResponses.3.usejsonforComplexDatahandLing.4.AlwaysSanitInputsanddebugviabro
Bearbeiten Sie Lesezeichen in Chrome
Aug 27, 2025 am 12:03 AM
Das Chrome -Lesezeichen -Bearbeitung ist einfach und praktisch. Benutzer können den Lesezeichen -Manager über die Verknüpfungsschlüsselstasten Strg Shift O (Windows) oder CMD Shift O (MAC) eingeben oder über das Browser -Menü eingeben. 1. Beim Bearbeiten eines einzelnen Lesezeichens klicken Sie mit der rechten Maustaste, um "Bearbeiten" auszuwählen, den Titel oder die URL zu ändern und klicken Sie auf "Finish", um sie zu speichern. 2. Bei der Organisation von Lesezeichen in Stapeln können Sie Strg (oder CMD) an Multiple-Choice-Lesezeichen im Lesezeichen-Manager halten. Klicken Sie mit der rechten Maustaste, um mit "Wechsel zu" oder "Kopieren in" den Zielordner zu wählen. 3. Klicken Sie beim Exportieren und Importieren von Lesezeichen auf die Schaltfläche "Lösen", um das "Lesezeichen exportieren" auszuwählen, um sie als HTML -Datei zu speichern, und stellen Sie diese dann über die Funktion "Lesezeichen importieren" bei Bedarf wieder her.
Was ist der Unterschied zwischen Emission und leer in PHP
Aug 27, 2025 am 08:38 AM
ISSET () checksifAvariableExistsandisnotnull, returningReEvenforzero, false, oremptystringvalues; 2.Ampty () ChecksifAvariableIsnull, false, 0, "0", "", Orundefined, returningReeforthse "falyy" Werte; 3.ISSet () returnsfalsefornoni. "
Wie bekomme ich das aktuelle Datum und die aktuelle Uhrzeit in PHP?
Aug 31, 2025 am 01:36 AM
Usedate ('y-m-dh: i: s') witdate_default_timezone_set () togetcurrentDateAnDimeInphp, um sicherzustellen, dass AccurateresultsbySettingThedEredTimeZonelike'america/New_York'beForecallingDate () () sicherstellt.


