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

如何在PHP中将WordPress插件返回的序列化数据转为数组?

解决WordPress All Export Pro中unserialize序列化数据失败的问题

问题分析

你遇到的unserialize(): Error at offset 0 of 99 bytes错误,核心原因是All Export Pro环境中传入的序列化字符串和本地测试版本不一致——大概率是插件自动处理了字符串的转义、编码,或者添加了隐藏字符(比如BOM头),导致unserialize无法解析长度匹配的内容。

可行解决方案

1. 修复转义/实体编码问题

你提供的序列化数据里包含"(HTML实体双引号),本地测试时可能已自动解码,但All Export Pro中可能保留了实体编码,导致长度计算错误。先解码再反序列化:

// 假设$serialized是从插件获取的原始字段值
$fixed_serialized = htmlspecialchars_decode($serialized);
$array = unserialize($fixed_serialized);

如果是PHP转义符(\\")的问题,改用stripslashes处理:

$fixed_serialized = stripslashes($serialized);
$array = unserialize($fixed_serialized);

2. 移除隐藏的BOM头或空白字符

部分情况下,字段内容可能带有UTF-8 BOM头或多余空白,导致unserialize解析失败,用ltrim清理:

$fixed_serialized = ltrim($serialized, "\x00\x09\x0A\x0B\x0C\x0D\x20\xEF\xBB\xBF");
$array = unserialize($fixed_serialized);

3. 验证字符串完整性(排查用)

先输出原始字符串的真实内容,确认是否和本地测试的一致:

// 输出转义后的字符串,查看是否有多余字符
echo htmlspecialchars($serialized);
// 对比长度是否匹配报错中的99字节
echo strlen($serialized);

如果长度不符,说明插件确实对字段做了额外处理,根据输出的实际内容调整修复逻辑。

4. 绕过unserialize的替代方案

如果以上方法都无效,直接用正则提取所有选项文本(适合你这种纯字符串数组的序列化格式):

preg_match_all('/s:\d+:"([^"]+)";/', $serialized, $matches);
// $matches[1]就是提取出的所有房产设施数组
$facilities = $matches[1];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:02:54