【问题标题】:can't unserialize - PHP 7.1.22无法反序列化 - PHP 7.1.22
【发布时间】:2019-10-03 14:40:29
【问题描述】:

我使用 PHP 核心序列化序列化关联数组

$additional_email = serialize($customer->getData('addtionalemail'));

然后将此值保存在Mysql数据库中

s:209:"a:1:{i:0;a:1:{i:0;a:5:{s:16:"additional_email";s:13:"test@test.com";s:9:"record_id";s:1:"0";s:26:"apply_to-prepared-for-send";a:1:{i:0;s:1:"0";}s:8:"apply_to";a:1:{i:0;s:1:"0";}s:10:"initialize";s:4:"true";}}}";

当我对上述值进行反序列化时,它不起作用。我在序列化和反序列化之前使用了 base_64_encode 和 decode 之类的解决方案,但它没有解决问题,也使用了 preg_match 解决方案,但没有运气。

我使用unserialize online tool,它也无法反序列化上述字符串。序列化值有问题,谁能指出正确的方向?

【问题讨论】:

  • $customer->getData('addtionalemail') 中有什么?你能告诉我们吗?

标签: php string serialization


【解决方案1】:

看起来您以某种方式获得了两次 serialized 的值。运行unserialize 两次会撤消该操作:

print_r(unserialize(unserialize('s:209:"a:1:{i:0;a:1:{i:0;a:5:{s:16:"additional_email";s:13:"test@test.com";s:9:"record_id";s:1:"0";s:26:"apply_to-prepared-for-send";a:1:{i:0;s:1:"0";}s:8:"apply_to";a:1:{i:0;s:1:"0";}s:10:"initialize";s:4:"true";}}}";')));

输出:

Array (
  [0] => Array (
    [0] => Array (
      [additional_email] => test@test.com
      [record_id] => 0
      [apply_to-prepared-for-send] => Array (
         [0] => 0 
      )
      [apply_to] => Array (
        [0] => 0
      )
      [initialize] => true
    )
  )
)

Demo on 3v4l.org

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多