【发布时间】:2020-08-04 10:19:42
【问题描述】:
我有一个 PHP 序列化字符串,我在 Node js 中使用 php-serialize 或 '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 类,它就会停止工作。
请有人帮我解决这个问题。提前致谢。
【问题讨论】:
-
你可以使用BSON Package
-
@Triby 我尝试过使用 BSON 包。它没有用。它给了我错误 Error: bson size must be >= 5, is 0.
-
那么,您的 BSON 有错误,您要如何调试和查看其内容?
-
其实是对的。在 PHP 中反序列化时,它显示了预期的结果,但不在节点中
-
但是在尝试反序列化之前你需要知道你在节点中得到了什么。
标签: php node.js regex mongodb deserialization