разобрать проблему в php - PullRequest
4 голосов
/ 22 мая 2010

Я использую функции сериализации / десериализации в php 5.2. сохраняемый текст отправляется через форму. Кстати, без пробелов до или после. если текст содержит "или" он сериализуется успешно. проблема в том, что он не отменяет сериализацию назад. что я делаю неправильно?

Ответы [ 4 ]

9 голосов
/ 10 июня 2013

Дэвид Уолш имеет простое решение:

//to safely serialize  
$encoded_serialized_string = base64_encode(serialize($your_array));  

//to unserialize  
$array_restored = unserialize(base64_decode($encoded_serialized_string));  

http://davidwalsh.name/php-serialize-unserialize-issues

4 голосов
/ 22 мая 2010

это магические цитаты, вероятно, в ответ на такое поведение. Таким образом, для десериализации вам может потребоваться сначала сделать полоску ():

if (get_magic_quotes_gpc()) $data = stripslashes($data);

хотя почти невозможно включить magic_quotes в системе 5.2 ...
Чтобы сказать что-то определенное, вы должны найти разницу между исходными и возвращенными данными.

Но в любом случае, почему бы вам не использовать сессии вместо отправки данных в браузер и обратно? Сессии действительно быстрее и безопаснее.

1 голос
/ 22 мая 2010

При сериализации следует использовать addslashes, а при десериализации - stripslashes.

Пример:

if (get_magic_quotes_gpc())
{
  serialize($variable);
}
else
{
  addslashes(serialize($variable));
}

if (get_magic_quotes_gpc())
{
  stripslashes(unserialize($variable));
}
else
{
  unserialize($variable);
}
0 голосов
/ 01 июля 2010

Добавление косых черт в кавычки решает проблему.Посмотрите на мой код: http://codepad.org/7JWa2BT6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...