Если я наберу å
в CMD, fgets перестанет ждать ввода, и цикл будет работать до тех пор, пока я не нажму ctrl-c
. Если я наберу «обычные» символы, такие как a-z0-9!?(), он будет работать, как и ожидалось.
Я запускаю код в CMD под Windows 7 с кодировкой UTF-8 (chcp 65001
), файл сохраняется как UTF-8 без bom. Я использую PHP 5.3.5 (cli).
<?php
echo "ÅÄÖåäö work here.\n";
while(1)
{
echo '> '. fgets(STDIN);
}
?>
Если я изменю кодировку на chcp 1252
, цикл не прерывается, когда я набираю å
и печатаю «> å», но «ÅÄÖåäö work here» становится «Ã…ÄÖåäö work here!». И я знаю, что могу изменить файл на ANSI, но тогда я не могу использовать специальные символы, такие как ╠╦╗.
Почему же fgets перестает ждать ввода данных пользователем после того, как я набрал åäö?
И как это исправить?
РЕДАКТИРОВАТЬ:
Также обнаружил странный баг. echo "öäåÅÄÖåäö work here! Or?".chr(10);
-> ��äåÅÄÖåäö work here! Or? re! Or?
. Если первый символ в эхе равен å/ä/ö
, он печатает странные символы И в конце выводятся дубликаты с n - 1
символами.. (n = количество символов åäö в начале строки).
Например: echo "åäö 1234" -> ??äö 123434
и echo åäöåäö 1234
-> ??äöåäö 1234 1234
.
EDIT2 (решено):
Проблема была chcp 65001
, сейчас использую chcp 437
(chcp 437). Большое спасибо Тимоти Мартенсу!
å
в CMD вне php? 2) Логично, что UTF-8Å
не совпадает с Windows-1252Å
, поэтому в результате получаетсяÃ
. Но что произойдет, если вы попытаетесь преобразовать файл PHP в Windows-1252? - person Qqwy   schedule 02.12.2011chcp 65001
(UTF-8), так и сchcp 1252
. 2) Я использую UTF-8 в cmd И в качестве кодировки для файла PHP. Если я использую windows-1252 в файле PHP, ничего не меняется. Я думаю, что проблема в Windows/PHP. Когда я используюchcp 1252
, он работает для ÅÄÖ (даже если файл PHP имеет кодировку UTF-8), но тогда я не могу использовать ╠╦╗ и т. д. - person Sawny   schedule 03.12.2011var_dump(fgetc(STDIN))
-> bool(false);var_dump(fgets(STDIN))
-> bool(false); когда я набираюå
(или äö). Иначе это работает. - person Sawny   schedule 03.12.2011