PHP-使用unserialize时获取bool(false)


PHP - Getting bool(false) when using unserialize

我从服务器得到的$response如下所示:-

a:2:{s:3:"Car";s:0:"";s:9:"JbMessage";s:0:"";s:10:"PreBooking";s:0:"";s:6:"pickup";s:36:"TOWNEND CENTRE; WORKSOP ROAD S26 4WB";s:4:"Zone";s:8:"OOA_EAST";s:7:"dropoff";s:41:"PRINCE WILLIAM ROAD; LOUGHBOROUGH LE115GU";s:8:"PassName";s:0:"";s:8:"Customer";s:0:"";s:9:"AccountNo";s:0:"";s:8:"DocketNo";s:0:"";s:3:"Tel";s:0:"";s:7:"CarType";s:3:"Car";s:8:"Comments";s:0:"";s:9:"Comments1";s:0:"";s:9:"OrderedBy";s:0:"";s:12:"Autorization";s:0:"";s:8:"BookedBy";s:0:"";s:15:"BookingDateTime";s:19:"11042014 09:31:49";s:10:"Dispatched";s:10:"01011900";s:5:"Miles";s:5:"43.21";s:6:"Driver";s:0:"";s:7:"Payment";s:4:"Cash";s:8:"Priority";s:1:"1";s:4:"Done";s:1:"C";s:11:"JourneyType";s:0:"";s:12:"NoPassengers";s:1:"1";s:5:"Drops";s:0:"";s:2:"TM";s:0:"";s:14:"BookingMethode";s:5:"Phone";s:7:"Editted";s:0:"";s:9:"EdittedOn";s:10:"01011900";s:9:"FromHouse";s:0:"";s:6:"FromNo";s:0:"";s:10:"FromStreet";s:28:"TOWNEND CENTRE; WORKSOP ROAD";s:10:"FromZoneNo";s:2:"73";s:12:"FromPostCode";s:7:"S26 4WB";s:10:"FromEWGrid";s:0:"";s:12:"emailAddress";s:0:"";s:9:"FromNotes";s:0:"";s:11:"AutorizedBy";s:0:"";s:7:"ToHouse";s:0:"";s:4:"ToNo";s:0:"";s:8:"ToStreet";s:33:"PRINCE WILLIAM ROAD; LOUGHBOROUGH";s:8:"ToZoneNo";s:2:"73";s:10:"ToPostCode";s:7:"LE115GU";s:6:"Mobile";s:0:"";s:7:"ToNotes";s:0:"";s:8:"ToEWGrid";s:0:"";s:11:"BookingDate";s:19:"11042014 09:31:00";s:10:"DriverFare";s:4:"71.5";s:12:"CustomerFare";s:4:"71.5";s:12:"DriverExtras";s:1:"0";s:14:"CustomerExtras";s:1:"0";s:11:"WaitingTime";s:0:"";s:

我正在做以下事情:-

$response = strip_tags($response);
$deserializedAddressArray = stripslashes($response);
$deserializedAddressArray = unserialize($response);
var_dump($deserializedAddressArray);

然而,我不明白为什么$deserializedAddressArray会以bool(false)的形式出现,有什么想法吗?

您的序列化数据无效。请确保你给出的字符串正确。它没有结束括号,例如有效的序列化字符串

 a:1:{s:4:"name";s:6:"testing";}

这是一个有效的序列化字符串,带括号

所以我们知道字符串是无效的,但这可能有以下原因之一:

  • 如果字符串存储在表中,则列类型应为long text,以确保存储高度可变的字符串长度。

  • 如果任何正在序列化的数据包含非编码字符或多字节字符,则字符串可能以其中一个字符结尾。PHP使用未编码的字符取消序列化失败?

如果能正常工作,问题出现在a:2:的开头——我一把它改成a:77:,它就开始工作了。

这是因为响应中有77个值。

您必须增加数据库中表的大小。示例:varchar 255为varchar 510或将类型更改为TEXT。