некорректный результат substr и mb_substr для строк включающие бинарные данные

tony2001

TeaM PHPClub
>>я должен догадаться сам, что mbstring включен? ладно, допустим догадался.
>>но настройки и кодировки я его точно угадать не смогу, а они имеют значение.

в ответ получаю одну строку:
>mbstring.internal_encoding = UTF-8

вы специально всё усложняете, да?
кстати, надо копировать настройки из phpinfo(), а не из php.ini, поскольку важны именно они.

ладно, включил mbstring.func_overload = 6
и что я вижу:
substr() (вернее, mb_substr()) пытается работать со строкой в контексте UTF-8, что вполне ожидаемо, ведь вы ему сами сказали, что internal_encoding - UTF-8.

вот как оно работает с UTF-8:
Код:
# php -d mbstring.internal_encoding=UTF-8 -d mbstring.func_overload=6 -r ' $d = file_get_contents("1.txt.cp1251"); var_dump(substr($d, 8, 3));'
string(2) "t
"
а теперь смотрим в документацию, исправляем код и вуаля:
Код:
# php -d mbstring.internal_encoding=UTF-8 -d mbstring.func_overload=6 -r 'mb_internal_encoding("CP1251"); $d = file_get_contents("1.txt.cp1251"); var_dump(substr($d, 8, 3));'
string(3) "est"
...всё работает.
 
Сверху