跳到主要内容

PHP 序列化转换工具

解析 PHP serialize 文本并转成 JSON,也能把 JSON 转回序列化格式,中文长度按字节正确计算。

{
  "name": "张三",
  "age": 30,
  "tags": [
    "php",
    "序列化"
  ]
}

字符串长度按字节数还原,所以中文、emoji 都不会被截断或错位——这正是手写时最容易算错的地方。

对象会保留类名(JSON 里表现为 __php_class 字段),转回去仍然还原成对象而不是数组。

含引用(R: / r:)或自定义序列化(C:)的内容需要维护对象身份图,本工具不解析,会直接报错而不是给出错的结果。

解析只把输入当数据读,不会执行里面任何内容。

这个工具是什么

PHP 序列化转换工具用来读懂数据库里、缓存里、session 里存的那串 a:2:{s:4:"name";s:6:"张三";...}:左边贴序列化文本,右边给出结构化的 JSON,字段名与类型一目了然。反过来也可以把 JSON 转成序列化文本,用来造测试数据。

整个解析在浏览器里完成,输入内容不会上传。

什么时候用它

  1. 从数据库的某个字段里看到一串 a: 开头的文本,想知道它到底是什么结构。
  2. 排查 session 或缓存数据:确认某个键存的是字符串还是数组,整数有没有被存成字符串。
  3. 造测试数据:把设计好的 JSON 转成序列化文本,直接写进 fixture 或 SQL 里。
  4. 核对字符串长度:手写 s: 后面的字节数经常算错,工具给出的结果是准确的。
  5. 确认对象序列化后保留了什么类名与属性。

有什么限制

  • 不还原引用关系:含 R:、r: 的内容会直接报错,因为还原它们需要维护对象身份图。
  • 不支持实现了 Serializable 接口的类:那类内容的 C: 格式与普通对象不同。
  • 对象转成 JSON 时类名会放在 __php_class 字段里,转回去时按这个字段还原成对象。如果你的数据本来就有一个同名字段,会互相干扰。
  • 数字键与字符串键的区分按 PHP 的规则处理:'0' 会被当成整数键 0。
  • 解析只把输入当数据读,不执行其中任何内容,但仍建议不要粘贴来源不明的敏感数据。

常见问题

Q:为什么这里的字符串长度要按字节算? A:PHP 的 s: 后面跟的是字节数而不是字符数,一个中文字符占 3 个字节。这也是手写序列化文本最容易出错的地方,工具按字节精确处理。

Q:解析报错说「含引用」是什么意思? A:这段内容里有两个元素指向同一个对象(PHP 用 R: 或 r: 标记)。还原这种共享关系需要跟踪每个位置的引用编号,本工具不做这个还原。

Q:转出来的 JSON 里 __php_class 是什么? A:PHP 对象序列化时会记录类名。为了不丢信息,解析结果把它放在 __php_class 字段里;把这段 JSON 转回序列化文本时会重新还原成对象。

Q:能处理很大的内容吗? A:受浏览器可用内存限制,通常几十 MB 以内没问题。嵌套超过 64 层会被拒绝,避免构造出的输入把页面拖死。

相关工具

同类或常用搭配,接着往下做