Не работает unserialize PHP с кирилицей - error at offset

не работает unserialize

Сегодня, наткнулся на проблему с десериализацией массивов (unserialize PHP) у решил со всеми поделиться решением этой проблемы. Что же делать, когда не работает unserialize PHP  или выскакивает ошибка / предупреждение error at offset при работе с кирилицей?, с латиницей таких проблем нет. Об этом мы сегодня и поговорим, но для начала немного теории о функции unserialize и serialize PHP.

Функция PHP unserialize($str_array) - позволяет преобразовать строчный массив, сделанный с помощью функции serialize, в переменную типа array. Эти действия нужны для того, чтоб массив можно было сохранить в mySQL или записать в переменные сессии или куки.

 

Ошибка error at offset

Оговорюсь сразу, эту ошибку вы можете и не увидить. При проблемах с unserialize PHP ваш сервер может не показывать эту ошибку и не останавливать работу сервера. Он просто заполнит переменню пустыми данными. Отследить проблему, можно выводя функцией print_r() все переменные созданные с помощью функции unserialize.

 

Не работает unserialize PHP - решение проблемы

Решить проблему не очень то и сложно, главное знать где мы сохраняем и преобразовываем массив в строку. В этом месте после сериализации, до момента записи нужно закодировать строку в base64_encode, вот как это делал я, когда мне нужно было сохранить массив (array) в cookies:

setcookie('masZap', base64_encode(serialize($zap)), time()+3600,"/");

сначала я делаю serialize($zap), а потом base64_encode().

Доставать переменную с кук нужно так:

$zap=unserialize(base64_decode($_COOKIE['masZap']));

 

Теперь приведу более понятный пример, как решить проблему, когда не работает unserialize:

<?php $Mass=array("Строка 1", "Строка 2");
$str="";
$str=serialize($Mass);
$str=base64_encode($str);
echo $str;
//массив записан в строку, теперь достаем его в нужном месте
$get_str=base64_decode($str);
$get_Mass=unserialize($get_str);
print_r($get_Mass); ?>

 

Вот это и есть самый простой способ решение проблемы unserialize с кирилицей. В WordPress эта проблема встречается довольно редко, но теперь вы знаете что нужно делать когда "не работает unserialize PHP".

Читайте также пост: SEO плагины для WordPress

Если у вас остались вопросы, пишите их в комментариях, буду рад вам помочь.

Комментарии к записи «Не работает unserialize PHP с кирилицей - error at offset»:
  1. Oxi:

    Забавно, у меня тоже не работает unserialize PHP но ваш совет чет не помог. Вроде все правильно переписала:
    $getArray=serialize($arr);
    $getArray=base64_encode($getArray);
    ......
    $Array=unserialize($Array);
    $Array=base64_decode($Array);

    помогите плз.

    • admin:

      так понимаю вы в переменную $Array получаете закодированную строку?? Если да, то тут:
      $Array=unserialize($Array);
      $Array=base64_decode($Array);
      нужно поменять местами, вот так:
      $Array=base64_decode($Array);
      $Array=unserialize($Array);

      смотрите пример плз

Сделать заказ
Онлайн помощь по WordPress