You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP unserialize偏移量错误:offset 438 of 750 bytes问题求助

PHP反序列化本地报错但在线工具正常的问题解析

我来帮你拆解这个问题——这种本地unserialize报错但在线工具能正常解析的情况,十有八九是字符编码不匹配导致的,尤其是你的序列化字符串里包含了非ASCII字符(比如那个显示为?????? ?的商品名称,应该是波斯语这类多字节字符)。

问题根源

PHP的serialize()函数在记录字符串长度时,统计的是字节数而非字符数。如果序列化这个字符串的环境编码,和你本地反序列化时的编码不一致,就会触发长度校验失败:

  • 举个例子:假设这个字符串是在Windows-1256编码下序列化的,当时计算的字节数是17(对应s:17:"?????? ?"),但在UTF-8环境下,这些多字节字符的实际字节数会更多,unserialize时发现实际字节数和标注的17不匹配,就会抛出Error at offset的错误。
  • 在线工具通常会自动适配编码,或者使用了和序列化时一致的编码环境,所以能顺利解析。

解决方案

这里有几个可行的修复方向:

1. 统一编码环境

在你的本地代码开头,设置和序列化时一致的内部编码(比如序列化用的是UTF-8):

mb_internal_encoding('UTF-8');

$sri = 'a:8:{s:3:"key";s:32:"73b43c7df3604c8d725f856b219cffda";s:5:"email";s:19:"Aligh.Pro@gmail.com";s:4:"date";s:0:"";s:9:"user_info";a:4:{s:2:"id";i:2;s:5:"email";s:19:"Aligh.Pro@gmail.com";s:10:"first_name";s:5:"mahdi";s:8:"discount";s:4:"none";}s:9:"downloads";a:1:{i:0;a:3:{s:2:"id";i:44;s:8:"quantity";i:1;s:7:"options";a:2:{s:8:"quantity";i:1;s:8:"price_id";s:1:"1";}}}s:12:"cart_details";a:1:{i:0;a:10:{s:4:"name";s:17:"?????? ?";s:2:"id";i:44;s:11:"item_number";a:3:{s:2:"id";i:44;s:8:"quantity";i:1;s:7:"options";a:2:{s:8:"quantity";i:1;s:8:"price_id";s:1:"1";}}s:10:"item_price";d:20000;s:8:"quantity";i:1;s:8:"discount";d:0;s:8:"subtotal";d:20000;s:3:"tax";d:0;s:4:"fees";a:0:{}s:5:"price";d:20000;}}s:4:"fees";a:0:{}s:8:"currency";s:4:"RIAL";}'; 
$data_array = unserialize((string) $sri); 
echo '<pre>'; print_r($data_array); echo '</pre>';

2. 手动修复序列化字符串的长度

找到偏移量438对应的位置,也就是商品名称的长度标注s:17:,重新计算该字符串的实际字节数:

// 提取商品名称
$name = '?????? ?';
// 计算字节长度(strlen统计的是字节数,mb_strlen是字符数)
echo strlen($name); // 得到实际字节数,比如假设是23

然后把序列化字符串里的s:17:替换成s:23:(用实际计算出的数字),再重新反序列化。

3. 替换为更鲁棒的序列化方式

如果业务允许,建议用JSON代替PHP原生的serialize(),JSON对多字节字符的处理更友好,几乎不会出现这类编码相关的问题:

// 序列化时用json_encode
$json = json_encode($data_array);
// 反序列化时用json_decode
$data_array = json_decode($json, true);

内容的提问来源于stack exchange,提问作者Mahdi98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:31:24