把 serialize() 产出的字符串还原成可读结构(排版与 PHP 的 print_r 一致)。
解析在浏览器本地完成,输入不会离开这台设备。这一页原先是把内容 POST 给 /yasuo/yasuo13.php 由服务端解码的——序列化串里常是 session、缓存这类带敏感字段的数据,所以改成了纯前端实现,PHP 端点已删除。同类做法可参考 在线执行 Js。
| 按钮 / 选项 | 结果 |
|---|---|
| 反序列化输出即 PHP 的 print_r 结果 | Array
(
[tools] => Array
(
[0] => json
[1] => text
)
[site] => www.is46.com
)
|
| 对象 + 中文 + 空数组输入 178 字节 | [user] => __PHP_Incomplete_Class Object([__PHP_Incomplete_Class_Name] => stdClass,[id] => 10086,[name] => 张三,[roles] => admin / editor);[ts] => 1730000000.5;[empty] => Array() |
| 接近上限的输入18,426 字节 / 180 条嵌套记录 | 输出 27,352 字符,耗时 2.4 ms(本地解析,无网络往返) |
| 写错的串截断 / 非法类型 / 长度对不上 | 「数组没有结束花括号(第 17 字节处)」 |
对象一律还原成 __PHP_Incomplete_Class Object,只列字段、不模拟任何类逻辑(等价于 PHP 的 allowed_classes=false);C:、r:、S: 这类 serialize() 正常不会产出的标记直接判为格式错误。
长度上限 20KB,超限会直接提示;输出超过 20 万字符会截断。字符串的字节数必须写对(s:6:"张三" 是 6 字节不是 2 字符),一位之差就会报错——这正是 print_r 对齐验证里最容易翻车的地方。
对齐性怎么保证的:用 revamp/php_unserialize_diff.js 生成随机结构(含中文、引号、花括号、NUL、超大整数、INF/NAN、数字字符串键、多层嵌套)连同手写边界共 454 条用例,逐条与本机 PHP 8 的 print_r(unserialize($s, ['allowed_classes' => false])) 比对,PHP 判错的也必须判错——重跑三轮 1,362 条全部逐字节一致。