Smoren
29.09.2009 - 12:33
Запускаю следующий скрипт на локальной машине (Linux, Apache2, PHP5).
PHP |
<?php
include('db.php');
serialize_and_write();
function serialize_and_write() { global $MAIN; $serialMain = serialize($MAIN); $file = fopen('db.txt', 'w'); if(file_put_contents('db.txt', iconv("UTF-8", "windows-1251", $serialMain))) echo 'Serializing and writing ok!<br/>'; }
|
Все работает - файл сохраняется в нужной мне кодировке, но при использовании unserialize() в другом скрипте сервер выдает следующее:
Notice: unserialize(): Error at offset 68 of 18759 bytes in /home/www/testsite/www/index.php on line 6
Код выглядит так:
PHP |
$serialMain = join('', file('db.txt')); $MAIN = unserialize($serialMain); |
Если изменить его так:
PHP |
$serialMain = join('', file('db.txt')); $MAIN = unserialize(iconv("windows-1251", "UTF-8", $serialMain)); |
то функция unserialize() срабатывает, но на странице вместо текста отображается характерная проблемам с кодировкой белиберда, т.к. сама страница в кодировке cp1251.
Кто-нибудь, помогите справиться с проблемой. Заранее благодарен.
Спустя 1 час, 49 минут, 58 секунд (29.09.2009 - 13:23) Sylex написал(а):
Smorenнаверное нужно заботиться не о том, в какой кодировке хранить данные в виде сериализованного массива.... а о том - в какой кодировке ты берешь данные из файла, и в какой тебе нужно выводить
тебе нужно выполнить изменение каждого элемента массива $MAIN при выводе, если это необходимо (исходная кодировка файла не совпадает с текущей рабочей)
Спустя 1 час, 25 минут, 28 секунд (29.09.2009 - 14:48) Smoren написал(а):
Sylex
Спасибо за совет, но я уже разобрался с проблемой: в php.ini изменил default_charset на windows-1251, после чего все заработало без финтов с перекодировкой.