Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

unserialize

00 голосов
4
Здравствуйте, уважаемые.
в таблице b_iblock_section в поле description записан сериализованный массив
a:17:{s:2:"id";s:4:"2947";s:6:"parent";s:4:"2944";s:6:"active";s:1:"1";s:4:"note";s:22:"Поддержка ECC";s:5:"order";s:1:"5";s:4:"type";s:1:"9";s:4:"expr";s:0:"";s:4:"unit";a:1:{s:5:"block";s:1:"0";}s:5:"block";s:1:"0";s:5:"inweb";s:1:"0";s:6:"search";s:1:"0";s:7:"feature";s:1:"0";s:7:"publish";s:1:"1";s:10:"reference1";s:22:"Поддержка ECC";s:10:"reference2";s:3:"ECC";s:9:"catalogue";s:9:"9003#8317";s:5:"nomer";s:1:"a";}
после выборки поля из базы и дальнейшей при попытке unserialise его возвращается false
поле в базе DESCRIPTION text utf8_unicode_ci, причем если вставишь значение этого поля ручками в переменную то все прекрасно парсится. проблема в кодировке.
не подскажите каким образом можно массив распарсить?
спросил 26 Янв, 14 от xis (100 баллов)

4 Ответы

00 голосов
мне надо выцепить вот этот кусок s:4:"type";s:1:"9";
ответил 25 Май, 14 от xis (100 баллов)
00 голосов
ну если проблема в кодировке, то пробуйте

iconv ('UTF-8','CP-1251',$desc);

unserialize($desc);
ответил 25 Май, 14 от netruxa (150 баллов)
00 голосов
Код
$res = CIBlockSection::GetByID($SECTION_ID);
$arSection = $res->GetNext();
$arr = unserialize($arSection['~DESCRIPTION ']);

Если вы используете GetNext(), а не Fetch(), для десериализации берите ~DESCRIPTION, а не DESCRIPTION. GetNext() приводит данные в HTML-безопасный вид, десериализовать после этого невозможно.
ответил 21 Сен, 14 от Ly (4,580 баллов)
00 голосов
спасибо, попробую сегодня
ответил 27 Янв, 15 от xis (100 баллов)

Связанных вопросов не найдено