PHP - 使用反序列化时获取bool(false)

时间:2014-04-15 10:35:30

标签: php serialization

我从服务器获得的$响应如下所示: -

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)的形式回归,有什么想法?

4 个答案:

答案 0 :(得分:0)

您的序列化数据无效。请确保您提供正确的字符串。其中没有结束括号,例如有效的序列化字符串

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

这是带有结束括号的有效序列化字符串

答案 1 :(得分:0)

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

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

  • 如果要序列化的任何数据包含非编码字符或多字节字符,则字符串可能以其中一个字符结尾。 PHP unserialize fails with non-encoded characters?

答案 2 :(得分:0)

有了这个工作,问题就在开始时a:2: - 一旦我将其更改为a:77:它就开始工作了。

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

答案 3 :(得分:0)

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