Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Что не так с сериализованной строкой?


Автор: Ripper 4.6.2013, 06:48
Доброе утро!

Есть БД, в ней лежит строка, в PHP коде её десериализуют, и вылетает false. Вот строка: http://pastie.org/private/zgebpfcuqg5ffjzayksd2a

http://www.functions-online.com/unserialize.html выдает Error at offset 23 of 1397 bytes, но на 23 символе буква "з" в годе издания.

Еще странно что подобного рода инфа лежит для каждого товара, но для некоторых строчки не десериализутся, а для некоторых все работает. 
Длины вроде верные, во всяко случае я еще прогонял через ф-ии самописные которые нашел в инете которые типа фиксят длину. Но в любом случае, почему на 23ем символе ошибка не пойму

Спасибо заранее.

Автор: Arantir 4.6.2013, 07:32
эээ... а БД не реляционная?
Просто хранить сериализованные строки в БД - априори неправильно. 
Да, да, у Вас может оказаться много аргументов мне в ответ, но все же... Если еще не поздно - лучше переделать по-человечески.

Проблема, вероятно, в кодировках. Циферки в сериализованной строке указывают количество байт. А есть такая забавная вещь, что в Windows-1251 русские символы по одному байту, а в UTF-8 они по 2 байта. А в других кодировках еще как-то по другому может быть. Вот и ломается все, если где-то конвертация была.

Автор: Arantir 4.6.2013, 07:53
Вот, например, строка "Формат 185х250, 622 стр., цв. ил., французский перепл[...]" занимает 432 байта в Windows-1251 и 742 байта в UTF-8.
В какой кодировке у нее 428 байт из оригинальной строки, без понятия. Попытки конвертации указывают, что в других кодировках недостает символов для нормально сохранения этой строки. 428 символов - да, но но не байт. Возможно они были 428 до сохранения в БД, но потом она переделала в строке чего-то по своему усмотрению.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)