我有这个样本:
代码 PHP:
["conditions_encoded"] => string(324) "a:2:[i:1;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Combine`;s:10:`aggregator`;s:3:`all`;s:5:`value`;s:1:`1`;s:9:`new_child`;s:0:``;]s:4:`1--1`;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Product`;s:9:`attribute`;s:12:`category_ids`;s:8:`operator`;s:2:`==`;s:5:`value`;s:3:`140`;]]"
我尝试使用以下代码进行反序列化:
<?php Zend_Debug::dump(base64_decode(unserialize($block->getConditionsEncoded())));?>
但我收到此错误:
Error filtering template: Notice: unserialize(): Error at offset 0 of 324 bytes
如何修复此错误?您认为哪个是解决方案。
提前感谢!
问题是,这不是数据,用 php 的 serialize
序列化。自 解码存储在conditions_encoded
中的数据,您可以使用具有解码方法的MagentoWidgetHelperConditions
助手。
我再次查看了您的序列化数据,似乎不完全是格式,magento 存储在小部件的 conditions_encoded var 中。但似乎,您给定的代码使用了 { => [
、 } => ]
和 `` => "
的简单替代品,因此您可以使用以下内容轻松还原它:
$unescaped = str_replace(
['[', ']', '`'],
['{', '}', '"'],
$encoded);
$data = unserialize($unescaped);