【问题标题】:Serilaizing in PHP returns wrong value在 PHP 中序列化返回错误的值
【发布时间】:2018-04-16 14:58:01
【问题描述】:

我尝试使用 PHP 序列化我的数据。不幸的是,serialize() 函数返回了错误的值。

要序列化的字符串:

{"2c4cfd9a340dd0dc88b5712c680c1f88":{"type":"product_custom","layout":"default","size":"medium_large","attributes":{"62d7d5184b7a313dc64255bdb8187847":{"type":"image","color":"#FFFFFF","image":"36018"}}}}

serialize() 在我的服务器上返回的内容:

serialize($code);

s:204:"{"2c4cfd9a340dd0dc88b5712c680c1f88":{"type":"product_custom","layout":"default","size":"medium_large","attributes":{"62d7d5184b7a313dc64255bdb8187847":{"type":"image","color":"#FFFFFF","image":"36018"}}}}";

应该返回什么(https://duzun.me/playground/serialize):

a:1:{s:32:"2c4cfd9a340dd0dc88b5712c680c1f88";a:4:{s:4:"type";s:14:"product_custom";s:6:"layout";s:7:"default";s:4:"size";s:12:"medium_large";s:10:"attributes";a:1:{s:32:"62d7d5184b7a313dc64255bdb8187847";a:3:{s:4:"type";s:5:"image";s:5:"color";s:7:"#FFFFFF";s:5:"image";s:5:"36018";}}}}

【问题讨论】:

  • 我不确定该站点使用的是什么逻辑,但如果您只是尝试序列化字符串,则不应期望结果以a: 开头。 编辑: 看起来它首先将字符串解码为 JSON - 这就是你想要的吗?
  • 我正在尝试达到类似site 的结果。不幸的是,我不确定该网站如何实现正确的结果。
  • "应该返回什么" 是数组的序列化,而不是字符串的序列化。
  • 所以你可以先 json_decode 再进行序列化。如果你真的需要的话。
  • 为什么还要序列化 ​​JSON - 它已经是序列化对象...

标签: php wordpress serialization


【解决方案1】:

你需要先json_decode它才能得到想要的结果:
当您在 json_decode 中使用布尔开关作为第二个参数时,它将是一个数组而不是一个对象。

$serialized = serialize(json_decode($inputString, true));
echo $serialized;

// output: 
// a:1:{s:32:"2c4cfd9a340dd0dc88b5712c680c1f88";a:4:{s:4:"type";s:14:"product_custom";s:6:"layout";s:7:"default";s:4:"size";s:12:"medium_large";s:10:"attributes";a:1:{s:32:"62d7d5184b7a313dc64255bdb8187847";a:3:{s:4:"type";s:5:"image";s:5:"color";s:7:"#FFFFFF";s:5:"image";s:5:"36018";}}}}

【讨论】:

    【解决方案2】:

    您使用的网站不清楚它在做什么,但它似乎将字符串视为 JSON 并在将其序列化为 PHP 之前解码为数组。如果你想复制这个,你可以使用:

    $str = '{"2c4cfd9a340dd0dc88b5712c680c1f88":{"type":"product_custom","layout":"default","size":"medium_large","attributes":{"62d7d5184b7a313dc64255bdb8187847":{"type":"image","color":"#FFFFFF","image":"36018"}}}}';
    
    echo serialize(json_decode($str, true));
    

    a:1:{s:32:"2c4cfd9a340dd0dc88b5712c680c1f88";a:4:{s:4:"type";s:14:"product_custom";s:6:"layout";s:7:"默认";s:4:"大小";s:12:"medium_large";s:10:"属性";a:1:{s:32:"62d7d5184b7a313dc64255bdb8187847";a:3:{s:4:"类型";s:5:"图像";s:5:"颜色";s:7:"#FFFFFF";s:5:"图像";s:5:"36018";}}}}

    正如 cmets 中所指出的,除非有特定原因需要序列化 ​​PHP,否则请坚持使用已有的序列化 JSON 字符串 - 它更具可读性和可移植性。

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 2013-10-03
      • 2017-06-07
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      相关资源
      最近更新 更多