我有一个 PHP 序列化字符串,我使用 php-serialize 或 Node.js 中的 'locutus/php/var/unserialize'
进行反序列化。
"a:2:{s:3:\"$or\";a:1:{i:0;a:1:{s:4:\"$and\";a:1:{i:0;a:1:{s:20:\"attributes.FIRSTNAME\";C:18:\"MongoDB\\BSON\\Regex\":49:{a:2:{s:7:\"pattern\";s:2:\"^a\";s:5:\"flags\";s:1:\"i\";}}}}}}s:4:\"$and\";a:1:{i:0;a:1:{s:3:\"$or\";a:2:{i:0;a:1:{s:8:\"batch_id\";a:1:{s:7:\"$exists\";b:1;}}i:1;a:1:{s:2:\"sc\";a:1:{s:3:\"$ne\";i:-2;}}}}}}"
当我尝试反序列化时,出现错误,提示如下:
SyntaxError: Unknown / Unhandled data type(s): c
我的反序列化代码如下:
unserialize(<serialized_string>);
更新:
在使用php-serialize库时,我正在尝试以下代码:
const PhpSerialize = require("php-serialize");
const serialised_str = 'a:2:{s:3:"$or";a:1:{i:0;a:1:{s:4:"$and";a:1:{i:0;a:1:{s:20:"attributes.FIRSTNAME";C:18:"MongoDB\BSON\Regex":49:{a:2:{s:7:"pattern";s:2:"^a";s:5:"flags";s:1:"i";}}}}}}s:4:"$and";a:1:{i:0;a:1:{s:3:"$or";a:2:{i:0;a:1:{s:8:"batch_id";a:1:{s:7:"$exists";b:1;}}i:1;a:1:{s:2:"sc";a:1:{s:3:"$ne";i:-2;}}}}}}';
console.log(PhpSerialize.unserialize(serialised_str));
并且得到了这个错误:
Error: Expected '"' at index 106 while unserializing payload
如果我尝试反序列化没有类的字符串,它可以正常工作。但如果该字符串有一些 PHP 类,它就会停止工作。
请有人帮助我解决这个问题。提前感谢您的帮助。
C:18:\"MongoDB\\BSON\\Regex\"
,它不受 unserialize 函数的支持。也许如果在 PHP 中加载了该类,则可以做到,但是不确定它是否适用于 node.js。 - Triby