Иногда бывает надо сохранить массив с данными куда-то, чтобы потом его достать и прочитать. Есть две хорошие функции для этого — serialize и unserialize. И все бы ничего, но вот иногда массив не получается десериализовать назад — возвращается предательское bool(false) вместо заветного массивчика.
Проблем может быть две — первая это включенная директива magic_quotes. Лечится примерно так —
(get_magic_quotes_gpc()) ? stripslashes(unserialize($variable)) : unserialize($variable);
За работу кода не отвечаю, но думаю мысль понятна.
Второй вариант, с которым втух я на несколько часов, это переносы строки. Если массив имеет в себе ячейку, в которой несколько строк, то он нифига не сериализуется взад, а выдаст false. Лечится убиванием \r\n
$str = preg_replace("/\n/", "", $str); $str = preg_replace("/\r/", "", $str);
7 комментариев
Убили \r\n перед сериализацией, сохранили,
а если они понадобятся после unserialize?
Только метить, потом заменять на переносы.
вместо удаления переносо строк можно попробовать base64_encode
хотя я и часто использую serialize/unserialize но с описанной выше проблемой не стталкивался
Dmitry, я тоже согласен с тем что base64_encode будет тут к месту
$str
= preg_replace(
"/[\n\r]/"
,
""
,
$str
);
так экономим один вызов регекспа.
Да сейчас много движков поэтому это уже уходит на второй план ))
А об переменной s которая хранит в себе количество строк — забыли? Удаление переноса — уменьшение символов в строке, соответственно и в переменной s количество уменьшится.