Не працює unserialize, php

Вітаю, і давайте вже одразу з місця у кар'єр? Ви скористалися функцієюserialize, записали отриманий рядок у БД і після його зчитування, передали отриманий рядокunserialize, а у відповідь bool(false)? Т. е. інакше кажучи не працюєunserialize. У такому випадку моя вам порада спробуйте отриманий рядок, після функції serialize, закодувати за допомогоюbase64.

Що робити, якщо не працює unserialize?

unserialize(serialize($var)) == $var

Якщо після проведених маніпуляцій ви отримуєте рівність, то функції працюють справно. Капаємо далі, як правило, після функції serialize ми передаємо рядок на зберігання в БД, і ось тут вже потрібно використовувати base64_encode.

працює

Чому не працює unserialize?

Вся справа в тому, щоserialize створює докладний опис змінної практично будь-якого типу (докладніше можна прочитати тут). Я «серіалізував» масив у рядок, а в неї записується все: типи, довжини рядків, кількість елементів та й очевидно самі значення. У значенні одного з елементів проскочив символ - » (лапка), а вона автоматично екранується базою даних.

тобто. замість - », ви отримуєте \»

Я не став колупати чому вона не деекранується, періодично зустрічав що цю опцію відключають примусово щоб подібних проблем не відчувати, але для мене це не зовсім підходить.

А взагалі «серіалізовані» дані потрібно зберігати у спеціальних полях, тип данихBLOB. В описі цієї функції про це зазначено. Можна сказати, сам собі привіз проблеми.

Підсумок на сьогодні такий

Стаття звичайно трохи не по темі блогу, але на свій захист хочу написати наступне, коли я шукав чому unserialize не працює, то часто знаходив інформацію про магічнілапки і про те, що їх потрібно було відключити.

Ну і при розробці плагіна, що передбачає встановлення в чужу систему, не доречно було вносити такі глобальні зміни, як відключення подібних налаштувань.