Десериализация сериализованной строки PHP в node js - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть сериализованная строка PHP, которую я десериализовал, используя php -serialize или 'locutus/php/var/unserialize' в Node js.

"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 library:

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, она перестает работать.

Пожалуйста, кто-нибудь, помогите мне решить эту проблему. Заранее спасибо.

1 Ответ

0 голосов
/ 22 апреля 2020
"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;}}}}}}"

Это не BSON. BSON - это двоичный файл, и вы не сможете прочитать его как текст. Вышеприведенное выглядит так, как будто это может быть PHP -сериализованная PHP структура данных.

Похоже, вам следует уточнить, с какими разными частями вы работаете (прежде всего для себя, поскольку вы, кажется, путать различные форматы сериализации) и затем пересмотреть ваш вопрос.

Иногда, когда люди произносят фразу «документ BSON», на самом деле они вовсе не означают BSON - они просто ссылаются на карту ключей к значениям. потенциально с такими свойствами, как ключи, все строки.

...