A࿆Li 2019-06-08 17:40 采纳率: 0%
浏览 350

PHP unserialize 输出false,怎么解决谢谢!

array(10) {
[3]=>
string(5) "17.81"
[4]=>
string(5) "17.61"
[9]=>
string(5) "15.38"
[1]=>
string(5) "11.45"
[7]=>
string(5) "9.353"
[0]=>
string(5) "8.918"
[2]=>
string(5) "8.918"
[6]=>
string(5) "4.838"
[5]=>
string(5) "3.580"
[8]=>
string(5) "2.121"
}
上面是serialize前的数组,serialize之后为:
string(167) "a:10:{i:3;s:5:"17.81";i:4;s:5:"17.61";i:9;s:5:"15.38";i:1;s:5:"11.45";i:7;s:5:"9.353";i:0;s:5:"8.918";i:2;s:5:"8.918";i:6;s:5:"4.838";i:5;s:5:"3.580";i:8;s:5:"2.121";}"
存进MySQL数据库,字段设置的是varchar,字符集为utf8,内容为:
a:10:{i:3;s:5:"17.81";i:4;s:5:"17.61";i:9;s:5:"15.38";i:1;s:5:"11.45";i:7;s:5:"9.353";i:0;s:5:"8.918";i:2;s:5:"8.918";i:6;s:5:"4.838";i:5;s:5:"3.580";i:8;s:5:"2.121";}
用unserialize之后,输出的是bool(false),PHP版本5.6,急,在线等!谢谢!

  • 写回答

1条回答 默认 最新

  • 侧耳倾听% 2019-06-08 21:26
    关注

    php 提供serialize(序列化) 与unserialize(反序列化)方法。

    使用serialize序列化后,再使用unserialize反序列化就可以获取原来的数据。
    图片说明

    输出:

    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在计算长度时也会出问题。
    图片说明
    图片说明
    图片说明

    使用处理过单双引号,过滤\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" }

    评论

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛