Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: serialize/unserialize и UTF-8

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
DlTA
Отправлено: 09 Ноября, 2011 - 12:14:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




столкнулся с "(нет слов чтоб выразить)"
серелизуем данные на win-1251
serialize(array(1,2,"Текст")) = a:3:{i:0;i:1;i:1;i:2;i:2;s:5:"Текст";}
вроде все правильно и корректно
теперь тоже самое на UTF-8
serialize(array(1,2,"Текст")) = a:3:{i:0;i:1;i:1;i:2;i:2;s:10:"Текст";}

a:3:{i:0;i:1;i:1;i:2;i:2;s:5:"Текст";} = win-1251
a:3:{i:0;i:1;i:1;i:2;i:2;s:10:"Текст";} =UTF-8
ну как вам?!
и соответственно с unserialize проблемы если не то число для текста
 
 Top
Мелкий Супермодератор
Отправлено: 09 Ноября, 2011 - 12:27:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Таки всё правильно. UTF8 же.


-----
PostgreSQL DBA
 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 12:31:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DlTA пишет:
и соответственно с unserialize проблемы если не то число для текста
А какие конкретно проблемы?
 
 Top
caballero
Отправлено: 09 Ноября, 2011 - 12:46:26
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
и соответственно с unserialize проблемы

нет там никаких проблем - неоднократно проверено


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 12:49:03
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




caballero пишет:
нет там никаких проблем - неоднократно проверено
Если сериолизовать строку в файле утф-8, а десериализовать цп-1251 или наоборот что будет?

Спрашиваю из чистого любопытства. Может кто-нибудь провести тест?
 
 Top
caballero
Отправлено: 09 Ноября, 2011 - 12:59:17
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Если сериолизовать строку в файле утф-8, а десериализовать цп-1251


то что ты сериализуешь то он и отдает, если ты по дороге код конечно не перекодируешь. Не очень понятно что значит сериализовать в одной кодировке а десериализовать в другой

PHP вообще хранит строчные данные в UTF16


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 13:03:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




caballero пишет:
PHP вообще хранит строчные данные в UTF16
Можно ссылку на документацию?

Я сейчас подыму тестовое окружение и попробую сам понять что значит
caballero пишет:
Не очень понятно что значит сериализовать в одной кодировке а десериализовать в другой
 
 Top
Мелкий Супермодератор
Отправлено: 09 Ноября, 2011 - 13:13:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




caballero пишет:
PHP вообще хранит строчные данные в UTF16

PHP вообще хранит строки как байты. О чём число перед строкой и говорит: читать столько байт - это будет строка.


-----
PostgreSQL DBA
 
 Top
caballero
Отправлено: 09 Ноября, 2011 - 13:14:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
Можно ссылку на документацию

документацию чего? Это внутренний формат - общеприняттый для сишных програм.

Цитата:
PHP вообще хранит строки как байты

все программы хранят все данные в байтах

Цитата:
О чём число перед строкой и говорит

в си нет числа перед строкой. И строк тоже нет

(Отредактировано автором: 09 Ноября, 2011 - 13:16:22)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
DlTA
Отправлено: 09 Ноября, 2011 - 13:24:38
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Самогонщик пишет:
Если сериолизовать строку в файле утф-8, а десериализовать цп-1251 или наоборот что будет?
фигня получится
1) код символов не совпадет
2) в топе темы
(Добавление)
но если с первым можно было бы легко справиться пережав одну большую строку
то вот для того чтоб обойти вторую проблему надо лепить костыль

(переносить все сайты на utf-8 не предлагайте, сам умный.)
 
 Top
Мелкий Супермодератор
Отправлено: 09 Ноября, 2011 - 13:29:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




caballero пишет:
в си нет числа перед строкой. И строк тоже нет

Я про сериализованный вид. А вы про что?
(Добавление)
DlTA пишет:
2) в топе темы

В чём там фигня-то? Поведение полностью адекватное.


-----
PostgreSQL DBA
 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 13:36:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




caballero пишет:
Это внутренний формат - общеприняттый для сишных програм.
Не слышал такого, хотелось бы пруфов именно для php.

DlTA пишет:
фигня получится
Всё получилось няшно. Проверил так: создал два файла, которые записывают в файл результат serialize(array(1,2,"Текст")), файлы в кодировке утф-8 и цп-1251. После чего прочитал и восстановил. Всё прошло нормально, нужно только сменить кодировку у полученных данных и профит.

PHP:
скопировать код в буфер обмена
  1. <?PHP //utf.php
  2. echo serialize(array(1,2,"Текст"));
  3. $file = fopen("./utf.txt","w");
  4. fwrite($file, serialize(array(1,2,"Текст")));
  5. ?>


PHP:
скопировать код в буфер обмена
  1. <?PHP //_cp1251.php
  2. echo serialize(array(1,2,"Текст"));
  3. $file = fopen("./utf.txt","r");
  4. echo fread($file, 100500);
  5. ?>


Были ещё файлы cp1251.php и _utf.php для проверки в обратном направлении.
 
 Top
DlTA
Отправлено: 09 Ноября, 2011 - 13:37:21
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Мелкий пишет:
Поведение полностью адекватное.

незнаю как для кого
но для меня было новостью что в utf-8
кирилица занимает в 2 раза больше чем для латиницы
и почему тогда не так же в win-1251?!
(Добавление)
serialize(array(1,2,"text"));
a:3:{i:0;i:1;i:1;i:2;i:2;s:4:"text";} utf-8
a:3:{i:0;i:1;i:1;i:2;i:2;s:4:"text";} win-1251

(Отредактировано автором: 09 Ноября, 2011 - 13:39:11)

 
 Top
Самогонщик
Отправлено: 09 Ноября, 2011 - 13:41:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011  


Помог: 8 раз(а)




DlTA пишет:
незнаю как для кого
но для меня было новостью что в utf-8
э.............................................................
*много нехороших слов*

http://ru[dot]wikipedia[dot]org/wiki/UTF-8
А тебя никогда не смущало, что утф-8 представляет миллион различных символов (юникод) в одном байте?
 
 Top
DlTA
Отправлено: 09 Ноября, 2011 - 13:43:02
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




Самогонщик пишет:
http://ru.wikipedia.org/wiki/UTF-8

мда, новость
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Кодировки и все смежное »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB