Если я набираю å в CMD, fgets перестает ждать большего ввода и цикл работает до тех пор, пока я не нажму ctrl-c. Если я нахожу "нормальные" символы, такие как a-z0-9!?(), Он работает так, как ожидалось.
Я запускаю код в CMD под Windows 7 с UTF-8 как charset (chcp 65001), файл сохраняется как UTF-8 без bom. Я использую PHP 5.3.5 (cli).
<?php
echo "ÅÄÖåäö work here.\n";
while(1)
{
echo '> '. fgets(STDIN);
}
?>
Если я изменяю кодировку на chcp 1252, цикл не прерывается, когда я набираю å и печатаю " > å", но работа "ÅÄÖåäö здесь" становится "Ã... Ã" Ã-à ¥ äà ¶ работать здесь!". И я знаю, что я могу изменить файл в ANSI, но тогда я не могу использовать специальные символы, такие как ╠╦╗.
Итак, почему fgets перестают ждать ввода userinput после того, как я набрал åäö?
И как я могу это исправить?
EDIT:
Также обнаружена странная ошибка.
echo "öäåÅÄÖåäö work here! Or?".chr(10); → ��äåÅÄÖåäö work here! Or? re! Or?.
Если первый char в эхо составляет å/ä/ö, он печатает странные символы и конец выходного дубликата с n - 1 char.. (n = число åäö в начале строки).
Например: echo "åäö 1234" -> ??äö 123434 и echo åäöåäö 1234 → ??äöåäö 1234 1234.
EDIT2 (разрешено):
Проблема была chcp 65001, теперь я использую chcp 437 (chcp 437).
Большое спасибо Тимоти Мартенсу!