Исходные данные:
- PHP 7.2.6
- Windows 10
- Кодировка терминала CP866 (хотя её смена на utf-8 или windows-1251 ничего не меняет)
$line = fgets(STDIN, 2048);
var_dump($line);
var_dump(strlen($line));
var_dump(str_replace("\r\n", '', $line));
var_dump(ord(str_replace("\r\n", '', $line)));
С ASCII-символами все хорошо, а вот на любой кириллический символ будет такой результат:
string(3) "
"
int(3)
string(1) " "
int(0)
Из результата видно, что тут \r\n + один символ в однобайтной кодировке. И почему-то ord возвращает 0 на любой символ.
Пробовал подрочить iconv с cp866, windows-1251 и utf-8, но безрезультатно.
P.S. конечно можно воспользоваться функцией readline() и тогда все работает, но мне бы хотелось разобраться что не так с кодировками при работе с обычными потоками ввода.