Десериализуйте массив 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;}
Любая помощь была бы замечательной.
3 answers
Если вы можете сериализовать массив PHP в строку JSON, вы можете использовать deserializeJson на стороне CF.
Возможно, вам лучше всего ознакомиться с сценариями Шона Корфилда для проекта 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)#">
Который произвел:
Ну, это результат сериализации PHP - я предполагаю, что CF использует совершенно другой процесс. Схема кажется довольно простой:
datatype:size:structure
Или
numbertype:numbervalue
Итак
a:2:{i:2;s:3:"foo"}
Будет означать "массив размера 2 {целое число 2; строка 'foo' размера 3}". Обратите внимание, что массивы могут быть вложенными, и все может усложниться с объектами и другими сериализованными классами (см. Руководство PHP по сериализации объектов).