2010-03-26 13 views
7

Ho bisogno di salvare file con nomi di file non latini su un filesytem, ​​usando PHP.Codifica del filesystem di rilevamento PHP

Voglio rendere questo lavoro multipiattaforma. Come faccio a sapere quale codifica posso usare per scrivere il file? Capisco che molti moderni filesystem sono basati su UTF-8 (è corretto?), Ma dubito che Windows XP sia (per esempio).

Quindi, esiste un meccanismo di rilevamento affidabile?

+0

Ho sempre convertito i caratteri non latini nell'equivalente latino e la punteggiatura rimossa dal nome file se sto scrivendo un file su disco. Puoi garantire che i tuoi utenti abbiano installato le impostazioni locali appropriate? –

+0

NTFS (come usato in WinXP ecc.) Usa utf-16. php 5.x su Windows utilizza la codepage di IUSR, ad esempio, latin. Ho sentito che php 6 userà utf16 su windows – SteelBytes

+0

@Greg K: Il progetto su cui sto lavorando è un server WebDAV, quindi ho bisogno di una mappatura pulita. – Evert

risposta

5

Non è una risposta alla domanda, ma se non è necessario eseguire operazioni estese a livello di file system (come ricerca, ordinamento ...), esiste una soluzione alternativa per il problema delineata in this SO question: URLEncode() nomi di file.

Hörensägen.txt 

ottiene trasformato in

H%c3%b6rens%c3%a4gen.txt 

che dovrebbe essere sicuro da usare in qualsiasi file system ed è in grado di mappare qualsiasi carattere UTF-8.

Trovo che questo sia preferibile al tentativo di "nativamente" gestire le funzionalità del sistema operativo host, che è sicuramente complicato e soggetto a errori (oltre alle differenze del sistema operativo, sono sicuro che i vari formati di file system - FAT16 , FAT32, NTFS, extFS versioni 1/2/3 .... portare il proprio insieme di regole di cui essere a conoscenza.)

+0

Non male come suggerimento. Suppongo che potrei fornire l'opzione. La domanda a cui hai fatto riferimento menziona anche Windows utilizza ISO-8859-1. – Evert

+0

@Evert non esattamente, la gestione delle stringhe di Windows è stata basata su UTF-16 per molto tempo, per quanto ne so, la risposta afferma * PHP wrapper * alle funzioni del filesystem di Windows usa ISO-8859-1. Non so per certo se sia vero, ma è possibile. –

-2

Non è una risposta, ma ... WinXP è basato su UTF-8 (secondo Jeffrey Il libro "CLR via C#" di Richter e tutte le funzioni WinAPI ASCII sono solo wrapper per quelli UTF-8 simili.

+4

'WinXP è bollock basato su UTF-8'. tutta la famiglia WinNT è costruita su utf-16 (beh - quasi vero, prima nt non gestisce i surrogati) – SteelBytes

+0

Oh, davvero dispiaciuto. Scritto senza pensare a "..- 8" – kpower