2015-10-19 2 views
2

У меня была эта функция в течение очень долгого времени, и она до сих пор обслуживала меня. Очень простой скрипт, я запускаю его в командной строке (окна, я считаю, командная строка правильный термин), и я получаю странные результаты, смЧтение ввода из командной строки

function readline($prompt = '') { 
    echo $prompt; 
    return rtrim(fgets(STDIN), "\n"); 
} 

$name = readline('Enter Name: '); 
exit($name . 'dgd'); 

enter image description here

Вместо ожидаемого bratdgd. Кто-нибудь может сказать мне, что происходит?

ответ

1

В Windows символы новой строки представлены символьной последовательностью "\r\n", а не только "\n". Вам тоже нужно обрезать это.

rtrim() будет обрезать все пробелы, если вы просто опустить второй параметр:

function readline($prompt = '') { 
    echo $prompt; 
    return rtrim(fgets(STDIN)); 
} 
+0

Ах, Windows .... –

2

линия для Windows окончаний CRLF - \r\n.

Вы удалили \n, оставив только \r, что само по себе перемещает курсор в начало строки тока и переписывает, что там.

Следовательно ...

brat \r here 
dgd overwrites the above line 
dgdt result 
Смежные вопросы