Se si immette å
in CMD, fget smette di attendere ulteriori input e il ciclo viene eseguito finché non si preme ctrl-c
. Se digito caratteri "normali" come a-z0-9!?() Funziona come previsto.Come leggere caratteri non ASCII dall'input standard CLI
Eseguo il codice in CMD in Windows 7 con UTF-8 come set di caratteri (chcp 65001
), il file viene salvato come UTF-8 senza bom. Io uso PHP 5.3.5 (cli).
<?php
echo "ÅÄÖåäö work here.\n";
while(1)
{
echo '> '. fgets(STDIN);
}
?>
Se cambio charset al chcp 1252
il ciclo non si rompe quando digito å
e Stampa "> un" ma la "ÅÄÖåäö lavorano qui" diventare "à ... ÓÃ-à ¥ äà ¶ lavoro qui!". E so che posso cambiare il file in ANSI, ma poi non posso usare caratteri speciali come ╠╦╗.
Quindi perché fget smette di attendere l'input dell'utente dopo aver digitato åäö?
E come posso risolvere questo?
EDIT:
trovato anche uno strano bug. echo "öäåÅÄÖåäö work here! Or?".chr(10);
->��äåÅÄÖåäö work here! Or? re! Or?
. Se il primo carattere in eco è å/ä/ö
, stampa caratteri sconosciuti e il risultato finale è duplicato con il carattere n - 1
.. (n = numero di åäö all'inizio della stringa).
Ad esempio: echo "åäö 1234" -> ??äö 123434
e echo åäöåäö 1234
->??äöåäö 1234 1234
.
EDIT2 (risolto):
Il problema era chcp 65001
, ora uso chcp 437
(chcp 437). Grazie mille a Timothy Martens!
Alcune domande su questo problema: 1) cosa succede quando provi a digitare e 'å' nel CMD al di fuori del php? 2) È logico che un 'Å' UTF-8 non sia lo stesso di un windows-1252' Å', quindi il 'Ã' risultante. Ma cosa succede se provi a convertire il file PHP in windows-1252? – Qqwy
** 1) ** åäö -> "comando non affezionato", echo åäö -> åäö. Quindi funziona. Entrambi con 'chcp 65001' (UTF-8) e' chcp 1252'. ** 2) ** Uso UTF-8 in cmd AND come set di caratteri per il file PHP. Se uso Windows-1252 nel file PHP non cambia nulla. Penso che il problema sia in Windows/PHP. Quando uso 'chcp 1252' funziona per ÅÄ (anche se il file PHP è UTF-8), ma non posso usare ╠╦╗ ecc. – Sawny
Man, che domanda interessante ^^. Hai davvero la mia attenzione ora. Ho intenzione di sperimentare me stesso per un po ', e ti dirò non appena avrò trovato qualcosa. – Qqwy