2017-10-18 59 views
0

我有這樣的例子:錯誤過濾模板:注意:反序列化()

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

回答

0

問題是,這不是數據,用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