![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Acraft |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 19.4.2005 Репутация: 1 Всего: 2 |
Доброго времени суток.
Возникла следующая проблема из потока получаем данные:
По протоколу согласно которому обрабатываются эти данные, строка представляет собой смесь строковых (utf-8) и бинарных последовательностей, часть которых подлежит преобразованию функцией unpack()
Другая часть вырезается из строки "как есть" и вставляется в файл (изображение).
И третья часть представляющая собой обычную строку в кодировке utf-8
Проблема заключается в том, что в PHP 5.2.6 функции mb_substr() и substr() некорректно вырезают часть данных, если эти данные имеют хоть один символ кириллицы, не закодированный в UTF8. Из-за этого этими функциями невозможно вырезать нужный кусок из бинарных данных. Этого бага нет в версии PHP 5.2.5 и 4.4.1 p.s.: вариант через fopen читать фрагменты нужной длинны не подходит |
||||||||
|
|||||||||
Sannis |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.8.2007 Где: Москва Репутация: 6 Всего: 13 |
Или вы себе противоречите, или неточно выразились. С юникодом нужно использовать только mb_* функции. Я бы на вашем месте привёл весь код и пример файла ![]() Добавлено через 1 минуту и 8 секунд Да, а нужно ли вообще обрабатывать бинарные данные с помощью PHP? -------------------- |
||||
|
|||||
Acraft |
|
||||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 19.4.2005 Репутация: 1 Всего: 2 |
Простое описание, ниже будет еще особенность:
выводит: testабв, а должен testа а вот это, естественно, работает:
выводит: testа и
выводит: testа Проблема в том, что в его проекте $str содержит бинарные данные, например, тело JPG файла. И, если в этом теле есть хоть одна русская буква, то substr() из такой строки $str возвращает не то, что его просят. И вот особенность- баг наблюдается только тогда, когда позиция, начиная с которой надо вернуть строку, находится после хотябы одной русской буквы, т.е.:
выводит: tes а вто это:
выводит: строку из космоса, а должен: est В php.ini прописано mbstring.internal_encoding = UTF-8 ---- Еще раз напомню- в версиях PHP 5.2.5, 5.1.6, 4.4.1 бага нет, т.е. в указанных версиях
выводит: testа P.S.: Сегодня из портов установили патч php5-5.2.6_2. Первые тесты показали отсутствие проблемы. Это сообщение отредактировал(а) Acraft - 5.9.2008, 10:38 |
||||||||||||
|
|||||||||||||
Acraft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 19.4.2005 Репутация: 1 Всего: 2 |
||||
|
||||
chiv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.9.2008 Репутация: нет Всего: нет |
У меня такая же проблема функицией substr.
Причем возникает периодически 2-3 раза в сутки. Все файлы в Win1251. На хостинге PHP 5.2.6 Кто нибудь знает как обойти эту проблему? Можно использовать какую-нибудь другую функцию? Это сообщение отредактировал(а) chiv - 23.9.2008, 16:06 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |