2014-01-28 9 views
9

Мы столкнулись с какой-то странной проблемой при использовании PHP serialize/unserialize. Мы сериализуем и сохраняем в определенной строке в mysql (сопоставление UTF-8). При повторной инициализации он возвращает ошибку.Ошибка сериализации/unserialize PHP

Например: Строка:

"Anoop проделали большую работу вырезания картинки из журнала, который начал с буквой P."

Сериализированная данные в БД:

s: 96: «Anoop проделал отличную работу, вырезая снимки из журнала , который начинался с буквы P.»;

В то время как неэтериализация мы получили эту ошибку Notice - unserialize(): Error at offset 2 of 101 bytes. Мы заметили, что длина строки различна. В чем причина этой проблемы.

Любая помощь была бы действительно оценена. Благодаря!

+1

HTTP: // StackOverflow.com/questions/10152904/unserialize-function-unserialize-error-at-offset Посмотрите один раз, надеюсь, что вы найдете решение ... –

+2

Я остановил сериализацию данных в последнее время и начал просто хранить объекты json вместо этого, потому что проблемы с сериализацией меня вели орехи. – Dave

ответ

1

вы видите, что во второй строке есть точка с запятой? UTF-8 не использует один байт все время, это от 1 до 4 байтов.

При декодировании строк из базы данных убедитесь, что вход был закодирован с правильной кодировкой, когда он был введен в базу данных.

Я использовал форму для создания записей в БД, в которой было поле содержимого, которое было действительным JSON, но оно включало фигурные апострофы. Если страница с формой не было

в голове, то данные были переданы в базу данных с неправильной кодировкой. Затем, когда json_decode пытался преобразовать строку в объект, она терпела неудачу каждый раз.

1

PHP сериализации/десериализации не имеет никаких проблем,

это сделать, как

$string = "Anoop did a great job cutting out pictures from the magazine that started with the letter P. "; 
echo $string = serialize($string); 
echo '<br>'; 
echo unserialize($string); 

Тогда не ошибка.

Если вы нажмете на строку unserialize строку, то та же ошибка будет отображаться ранее.

$string = "Anoop did a great job cutting out pictures from the magazine that started with the letter P. "; 
//echo $string = serialize($string); 
echo '<br>'; 
echo unserialize($string); 

Это работает для меня, вы попробуете это.

3

Возможно, вы не используете utf-8 в своем соединении, или ваш PHP-контекст не является utf-8?

пытаются использовать SQL:

SET CLIENT_ENCODING = utf8 

Befor вы получите ваши данные.

попытка/проверить:

ini_set ('default_charset' , 'UTF-8'); 
setlocale (LC_ALL, 'de_DE.UTF-8'); # or what your favorit 
Смежные вопросы