UPDATE (13 luglio '17)
Anche se la documentazione non sembrano parlare di esso, PHP 7.0 e versioni successive supporta Unicode, infine, i nomi dei file su Windows pronto per l'uso. Le API del filesystem di PHP accettano e restituiscono i nomi dei file in base a default_charset
, che è UTF-8
per impostazione predefinita.
Fare riferimento a bug fix qui: https://github.com/php/php-src/commit/3d3f11ede4cc7c83d64cc5edaae7c29ce9c6986f
UPDATE (29 gennaio '15)
Se si ha accesso alla directory di estensioni PHP, è possibile provare a installare php-wfio.dll
a https://github.com/kenjiuno/php-wfio, e si riferiscono file tramite il protocollo wfio://
.
file_get_contents("wfio://你好.xml");
risposta originale
PHP su Windows utilizza il Legacy "API ANSI" esclusivamente per l'accesso ai file locali, il che significa che PHP utilizza il Locale Sistema invece di Unicode.
per accedere ai file i cui nomi di file contengono Unicode, è necessario convertire il nome del file per la codifica specificata per l'attuale sistema Locale. Se il nome del file contiene caratteri che non sono rappresentabili nella codifica specificata, sei fuori di fortuna(Update: Vedere la sezione sopra per una soluzione). scandir
tornerà senza senso per questi file e passando la stringa nel fopen
e gli equivalenti falliranno.
Per trovare la codifica diritto di utilizzare, è possibile ottenere il locale del sistema chiamando <?=setlocale(LC_TYPE,0)?>
, e alzando il Code Page Identifier (il numero dopo il .
) presso l'articolo MSDN https://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx.
Ad esempio, se la funzione restituisce Chinese (Traditional)_HKG.950
, significa che è in uso la codepage 950 e il nome file deve essere convertito nella codifica big-5. In questo caso, il codice dovrà essere come segue, se il file viene salvato in formato UTF-8 (preferibilmente senza BOM):
$fname = iconv('UTF-8','big-5',"你好.xml");
file_get_contents($fname);
o come segue se si salva direttamente il file come Big-5:
$fname = "你好.xml";
file_get_contents($fname);
è questa corrente di codice? Non hai cambiato $ fname con $ res in file_get_contents, o era solo un refuso? – ryanday
Questo è il mio refuso. Ho effettivamente cambiato i valori. –
Sono arrivato al mio sistema XP e ho provato il tuo codice. Ho salvato il file PHP in unicode e ho copiato/incollato ciò che hai scritto e posso leggere il file (stesso nome). In quale codifica è salvato il file sorgente? – ryanday