Десериализуйте массив PHP в coldfusion


Я работаю над проектом Coldfusion, в котором мне нужно извлечь некоторую информацию из базы данных на базе wordpress. Некоторая информация, которая мне нужна, находится в сериализованном массиве, хранящемся в таблице wp_options. Я не могу понять, как десериализовать данные массива в Coldfusion.

В настоящее время я использую разработанную версию Coldfusion 8. Я не могу перейти на Coldfusion 9, так как мое приложение works построено на Coldfusion 8

Я смог найти только эту ссылку http://www.cfinsider.com/index.cfm/2010/5/4/Serializing--Deserializing-in-ColdFusion-9 , в котором говорится о десериализации CFC, но, похоже, это не работает с массивом, который я передаю.

Вот пример данных, которые я пытаюсь десериализовать

a:2:{i:2;a:2:{s:5:"title";s:0:"";s:6:"number";i:5;}s:12:"_multiwidget";i:1;}

Любая помощь была бы замечательной.

Author: iangraham, 2010-12-22

3 answers

Если вы можете сериализовать массив PHP в строку JSON, вы можете использовать deserializeJson на стороне CF.

 4
Author: Sean Coyne, 2010-12-22 16:33:33

Возможно, вам лучше всего ознакомиться с сценариями Шона Корфилда для проекта ColdFusion. Я смог сделать с ним следующее:

<script:php>
    <?php
        $array = unserialize('a:2:{i:2;a:2:{s:5:"title";s:0:"";s:6:"number";i:5;}s:12:"_multiwidget";i:1;}');
        $_COLDFUSION["test"] = json_encode($array);
    ?>
</script:php>

<cfdump var="#deserializeJSON(variables.test)#">

Который произвел:

alt text

 6
Author: Todd Sharp, 2010-12-22 18:00:52

Ну, это результат сериализации PHP - я предполагаю, что CF использует совершенно другой процесс. Схема кажется довольно простой:

datatype:size:structure

Или

numbertype:numbervalue

Итак

a:2:{i:2;s:3:"foo"}

Будет означать "массив размера 2 {целое число 2; строка 'foo' размера 3}". Обратите внимание, что массивы могут быть вложенными, и все может усложниться с объектами и другими сериализованными классами (см. Руководство PHP по сериализации объектов).

 3
Author: Piskvor, 2010-12-22 16:24:56