| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > некорректная работа substr и mb_substr с бинарника |
| Автор: Acraft 3.9.2008, 23:37 | ||||||||
| Доброго времени суток. Возникла следующая проблема из потока получаем данные:
По протоколу согласно которому обрабатываются эти данные, строка представляет собой смесь строковых (utf-8) и бинарных последовательностей, часть которых подлежит преобразованию функцией unpack()
Другая часть вырезается из строки "как есть" и вставляется в файл (изображение).
И третья часть представляющая собой обычную строку в кодировке utf-8
Проблема заключается в том, что в PHP 5.2.6 функции mb_substr() и substr() некорректно вырезают часть данных, если эти данные имеют хоть один символ кириллицы, не закодированный в UTF8. Из-за этого этими функциями невозможно вырезать нужный кусок из бинарных данных. Этого бага нет в версии PHP 5.2.5 и 4.4.1 p.s.: вариант через fopen читать фрагменты нужной длинны не подходит |
| Автор: Acraft 5.9.2008, 10:37 | ||||||||||||
Простое описание, ниже будет еще особенность:
выводит: 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 16.9.2008, 12:08 |
| http://bugs.php.net/bug.php?id=45311 |
| Автор: chiv 23.9.2008, 15:37 |
| У меня такая же проблема функицией substr. Причем возникает периодически 2-3 раза в сутки. Все файлы в Win1251. На хостинге PHP 5.2.6 Кто нибудь знает как обойти эту проблему? Можно использовать какую-нибудь другую функцию? |