Если я набираю å
в 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).
Большое спасибо Тимоти Мартенсу!