Задать вопрос
@galliard

Как на PHP в консоли WINDOWS получить кириллический текст, введенный с клавиатуры?

Исходные данные:
- 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() и тогда все работает, но мне бы хотелось разобраться что не так с кодировками при работе с обычными потоками ввода.
  • Вопрос задан
  • 1494 просмотра
Подписаться 2 Средний 1 комментарий
Решения вопроса 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
<?php
// КОДИРОВКА В КОТОРОЙ НАПИСАН СКРИПТ
ini_set('default_charset','UTF-8');
mb_internal_encoding('UTF-8'); 

// ВЫВОДИТЬ НА КОНСОЛЬ
mb_http_output('IBM866');
ob_start("mb_output_handler"); 


// ДВОЙНАЯ ПЕРЕКОДИРОВКА . ТАК КАК ТУТ ОНА НЕПРАВИЛЬНО РАЗОБРАНА PHP
$a = iconv('IBM866','UTF-8',iconv('CP1251','IBM866',$argv[1]));

// РУССКИЕ АРГУМЕНТЫ
echo "\nпроверка: ".$a;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы