Я использую функции сериализации/unserialize в php 5.2. текст, который нужно сохранить, отправляется через форму. btw, без пробелов до или после. если текст содержит "или" она упорядочивает успешно. проблема не десериализируется назад. Что я делаю неправильно?unserialize problem in php
ответ
Когда вы сериализацию, вы должны использовать addslashes
и когда вы десериализируетесь, используйте stripslashes
функцию .
. Пример:
if (get_magic_quotes_gpc())
{
serialize($variable);
}
else
{
addslashes(serialize($variable));
}
if (get_magic_quotes_gpc())
{
stripslashes(unserialize($variable));
}
else
{
unserialize($variable);
}
оно вообще не сериализовалось. – opteronn
@Web, который сказал вам это? –
@Kurt: у вас могут быть магические цитаты включите его, см. мой обновленный ответ. Также, какую ошибку вы получаете, если есть? – 2010-05-22 14:51:28
это волшебные кавычки, вероятно, в ответ на такое поведение Итак, unseria Лизе вы, возможно, придется сделать stripslashes() первая:
if (get_magic_quotes_gpc()) $data = stripslashes($data);
хотя это почти невозможно иметь magic_quotes на в системе 5.2 ...
Для того, чтобы сказать что-то определенное, вы должны найти разницу между начальной и возвращенные данные.
Но так или иначе, почему бы вам не использовать сеансы вместо отправки данных в браузер и обратно? Сессии действительно быстрее и безопаснее.
Мне жаль, что я забыл сказать, что текст, который будет сериализован, ARRAY_ASSOCIATIVE. (возможно) из-за этой функции STRIPSLASHES не работает. – opteronn
все данные хранятся в файлах в сериализованном формате. SESSIONS не обрезает его. – opteronn
Извините @ Курт, но stripslashes НЕ HING делать с массивами. Он работает со строками. И это всегда работает. Во всяком случае, магические цитаты - это повод, и, чтобы сказать вам что-то определенное, вам нужно найти разницу между исходными и возвращенными данными. Или, по крайней мере, принесите обе строки здесь –
Добавление косой черты в цитаты решает проблему. Посмотрите на мой код: http://codepad.org/7JWa2BT6
Неправильный комментарий. Я избежал переменных перед формированием массива, поэтому добавили сляки. Сериализованная строка должна быть экранирована. а не наоборот –
Дэвид Уолш имеет простое решение:
//to safely serialize
$encoded_serialized_string = base64_encode(serialize($your_array));
//to unserialize
$array_restored = unserialize(base64_decode($encoded_serialized_string));
Он работает! Но я хотел бы знать, будет ли он исправлен на более поздней версии PHP и каковы причины этой проблемы. –
Это не ошибка с PHP. Как следует из более поздних ответов, вы должны использовать addlashes для обеспечения того, чтобы ваши кавычки были экранированы. Решение Дэвида Уолша работает, потому что оно преобразует все в строку base64, не содержащую кавычек. Я лично использовал этот метод, когда мне нужно было сохранять объекты stdClass в плоских файлах при разработке в системе без включения магических кавычек и развертывания на сервере, который это сделал. – Eclectic
- 1. serialize/unserialize in jQuery
- 2. unserialize array in Delphi
- 3. unserialize in php не возвращает никакого значения
- 4. unserialize error in sparkR
- 5. php unserialize
- 6. PHP unserialize сериализованные данные
- 7. PHP unserialize array
- 8. Php Curl with shopify problem in output
- 9. Symfony/Doctrine: Unserialize in action vs template
- 10. PHP-unserialize для объекта
- 11. Проблема с unserialize PHP
- 12. PHP - * быстрый * serialize/unserialize?
- 13. Unserialize данные сеанса PHP
- 14. PHP Unserialize Command array
- 15. Ошибка сериализации/unserialize PHP
- 16. Php unserialize массив сериализованных
- 17. serialize/unserialize php object
- 18. CKeditor in Iframe problem
- 19. problem in itemClick
- 20. 1wire problem in detail
- 21. sqrt problem in C++
- 22. iframe in chrome problem
- 23. problem in Tab background
- 24. PHP Unserialize и Accessing array
- 25. Ruby эквивалент функции «unserialize» PHP?
- 26. PHP unserialize - ошибка при индексе
- 27. code igniter php - unserialize array
- 28. @login_required problem in flask app
- 29. Captcha loading problem in popup
- 30. fstream unix problem in reading
Почему вы динь это? Почему бы не использовать сеансы или такие? - Отправка данных и получение их через POST означает, что пользователь может изменить его и должен передавать больше данных взад и вперед. – johannes
все данные хранятся в файлах в сериализованном формате. СЕССИИ не сокращают его. – opteronn
Хорошо, позвольте мне понять это. Вы получаете некоторые данные из формы POST, затем сериализуете массив $ _POST и записываете результирующую строку в файл? И затем вы читаете его обратно, данные не являются неэтериализованными. Правильно? –