【问题标题】:unserialize(): Error at offset 181 of 849 bytesunserialize():在 849 字节的偏移 181 处出错
【发布时间】:2015-09-07 10:42:18
【问题描述】:

这行得通 -

$serialized = 'a:23:{s:6:"fields";a:5:{s:21:"display_name_creditor";s:1:"1";s:24:"display_name_constituent";s:1:"1";s:14:"email_creditor";s:1:"1";s:14:"phone_creditor";s:1:"1";s:12:"total_amount";s:1:"1";}s:5:"id_op";s:2:"in";s:8:"id_value";a:0:{}s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:20:"Soft Credit details.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}';

$result = unserialize($serialized);

这不是 -

$serialized = 'a:23:{s:6:"fields";a:5:{s:21:"display_name_creditor";s:1:"1";s:24:"display_name_constituent";s:1:"1";s:14:"email_creditor";s:1:"1";s:14:"phone_creditor";s:1:"1";s:12:"amount";s:1:"1";}s:5:"id_op";s:2:"in";s:8:"id_value";a:0:{}s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:20:"Soft Credit details.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}'

我刚刚将 total_amount 字段更改为 amount 并收到此错误 --

unserialize(): Error at offset 181 of 849 bytes

我检查了unserialize() [function.unserialize]: Error at offsethttp://davidwalsh.name/php-serialize-unserialize-issues 提供的解决方案,但没有任何效果。

也尝试使用base64_encode/decode before serialize/unserialize

有什么提示吗?

【问题讨论】:

  • 反序列化工作字符串,重命名数组中的索引并对其进行序列化。如果你不知道自己在做什么,不要自己更改序列化的字符串。
  • 由于某些已知原因,在安装我们的软件之前,我们在数据库中定义了一组序列化值,其中 field_name 发生了变化。因此,需要预先编辑这些值,我在这里尝试这样做。

标签: php serialization


【解决方案1】:

第二个无效,原因是字段s:12:"amount" 声明该值是长度为12 的字符串。但是amount 只有6 个字节。所以你想使用s:6:"amount"

话虽如此,unserialize 然后进行更改然后serialize 新值可能更容易。

【讨论】:

  • O O -- 是吗,让我试试。感谢回复!
  • @JitendraPurohit 是的,一定是这样。基本上它的意思是type:length:contents代表字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多