错误过滤模板:注意:反序列化()

问题描述:

我有这样的例子:错误过滤模板:注意:反序列化()

代码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 

我该如何解决这个错误?你认为哪一种解决方案?

提前致谢!

+0

我觉得'有问题,请尝试用双引号来替换( “) –

+0

你能编辑我的代码以准确理解你的意思吗?谢谢! – Cristi

问题是,这不是数据,用php的serialize序列化。要对 解码存储在conditions_encoded中的数据,可以使用具有解码方法的\Magento\Widget\Helper\Conditions助手。

我再次查看了您的序列化数据,看起来它并不完全是widgets中conditions_encoded var的magento存储的格式。但现在看来,你给的代码使用一个简单的替代{ => [} => ]`` => ",所以你可以像这样的东西很容易地恢复它:

$unescaped = str_replace(
    ['[', ']', '`'], 
    ['{', '}', '"'], 
    $encoded); 

$data = unserialize($unescaped); 
+0

我得到这个错误错误过滤模板:\ Magento \ Widget \ Helper \条件不扩展Magento \ Framework \ App \ Helper \ AbstractHelper – Cristi

+0

@克里斯蒂你试过我的第二个代码? – Philipp