Я использую функции serialize / unserialize в php 5.2. текст, который нужно сохранить, отправляется через форму. btw, без пробелов до или после. если текст содержит «или», он сериализуется успешно. Проблема в том, что он не отменяет повторение. Что я делаю неправильно?
У Дэвида Уолша есть простое решение:
//to safely serialize $encoded_serialized_string = base64_encode(serialize($your_array)); //to unserialize $array_restored = unserialize(base64_decode($encoded_serialized_string));
это волшебные цитаты, вероятно, в ответ на такое поведение. Таким образом, для несериализации вам, возможно, придется сделать stripslashes ():
if (get_magic_quotes_gpc()) $data = stripslashes($data);
хотя почти невозможно иметь magic_quotes в системе 5.2.
Чтобы сказать что-то определенное, вам нужно найти разницу между исходными и возвращенными данными.
Но так или иначе, почему бы вам не использовать сеансы вместо отправки данных в браузер и обратно? Сессии действительно быстрее и безопаснее.
Когда вы сериализуете, вы должны использовать addslashes
и когда вы несериализуете, используйте функцию stripslashes
.
Пример:
if (get_magic_quotes_gpc()) { serialize($variable); } else { addslashes(serialize($variable)); } if (get_magic_quotes_gpc()) { stripslashes(unserialize($variable)); } else { unserialize($variable); }
Добавление косой черты в цитаты решает проблему. Посмотрите мой код: http://codepad.org/7JWa2BT6