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

Node.js能否像PHP一样反序列化数据?PHPUnserialize调用报错如何解决?

问题原因

  • 首要原因是你传入的序列化字符串包含HTML转义实体:原字符串里的"是网页编码后的双引号,PHP序列化标准格式要求的是原生双引号",反序列化库无法识别编码后的实体,所以抛出数据类型错误。
  • 次要可能是你使用的PHPUnserialize库版本过旧、实现不完善,无法兼容PHP数组的整数索引格式。

解决步骤

  1. 先对序列化字符串做HTML实体解码,把所有"替换为",如果有其他HTML实体(如</>)也同步转换。
  2. 建议换用维护更稳定的php-serialize包处理反序列化,安装命令:
npm install php-serialize
  1. 完整实现代码参考:
const { unserialize } = require('php-serialize');

// 你的原始序列化字符串
const ignoredRaw = 'a:3:{i:19694;a:5:{s:16:"ignore_ignore_id";s:5:"19694";s:15:"ignore_messages";s:1:"1";s:17:"ignore_signatures";s:1:"1";s:13:"ignore_topics";s:1:"1";s:12:"ignore_chats";s:1:"0";}i:25895;a:5:{s:16:"ignore_ignore_id";s:5:"25895";s:15:"ignore_messages";s:1:"0";s:17:"ignore_signatures";s:1:"0";s:13:"ignore_topics";s:1:"0";s:12:"ignore_chats";s:1:"1";}i:19917;a:5:{s:16:"ignore_ignore_id";s:5:"19917";s:15:"ignore_messages";s:1:"1";s:17:"ignore_signatures";s:1:"0";s:13:"ignore_topics";s:1:"0";s:12:"ignore_chats";s:1:"0";}}';
// 替换HTML实体为原生字符
const ignored = ignoredRaw.replace(/"/g, '"');

// 反序列化
const igusers = unserialize(ignored);
const ignoredids = [];

// 筛选ignore_chats为1的ID
for (const key in igusers) {
  if (igusers[key].ignore_chats === '1') {
    // 如需数字类型可以转Number:Number(igusers[key].ignore_ignore_id)
    ignoredids.push(igusers[key].ignore_ignore_id);
  }
}

// 输出结果符合预期:[ '25895' ]
console.log(ignoredids);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:39:03