在PHP中进行Serilaizing会返回错误的值

时间:2018-04-16 14:58:01

标签: php wordpress serialization

我尝试用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";}}}}

2 个答案:

答案 0 :(得分: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";}}}}

答案 1 :(得分:0)

您正在使用的网站并不清楚它正在做什么,但它似乎将字符串视为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));
  

一个:1:{S:32: “2c4cfd9a340dd0dc88b5712c680c1f88”;一个:4:{S:4: “类型”; S:14: “product_custom”; S:6: “布局”; S:7:”默认 “; S:4:” 大小 “; S:12:” medium_large “; S:10:” 属性 “;一个:1:{S:32:” 62d7d5184b7a313dc64255bdb8187847 “;一个:3:{S:4:”类型 “; S:5:” 图像 “; S:5:” 颜色 “; S:7:” #FFFFFF “; S:5:” 图像 “; S:5:” 36018" ;}}}}

正如评论中所指出的,除非有特定的原因需要序列化PHP,否则只需坚持使用已有的序列化JSON字符串 - 它将更具可读性和便携性。