2010-03-26 22 views
7

Necesito guardar archivos con nombres de archivo no latinos en un filesystem, usando PHP.PHP detección de la codificación del sistema de archivos

Quiero hacer que esto funcione multiplataforma. ¿Cómo sé qué codificación puedo usar para escribir el archivo? Entiendo que muchos sistemas de archivos modernos están basados ​​en UTF-8 (¿es correcto?), Pero dudo que Windows XP sea (por ejemplo).

Entonces, ¿hay un mecanismo de detección robusto?

+0

Siempre he convertido caracteres no latinos al equivalente latino y quité la puntuación del nombre del archivo si estoy escribiendo un archivo en el disco. ¿Puedes garantizar que tus usuarios tengan instalada la configuración regional adecuada? –

+0

NTFS (como se usa en WinXP, etc.) usa utf-16. php 5.x en Windows usa la página de códigos de IUSR, por ejemplo, latin. Escuché que php 6 usará utf16 en Windows – SteelBytes

+0

@Greg K: El proyecto en el que estoy trabajando es un servidor WebDAV, por lo que necesito un mapeo limpio. – Evert

Respuesta

5

No es una respuesta a su pregunta, pero si no necesita realizar operaciones extensas en el nivel del sistema de archivos (como buscar, ordenar ...), existe una buena solución multiplataforma para el problema descrito en this SO question: URLEncode() ing nombres de archivo.

Hörensägen.txt 

se excita en

H%c3%b6rens%c3%a4gen.txt 

que debe ser seguro para usar en cualquier sistema de archivos y es capaz de asignar cualquier carácter UTF-8.

Considero que esto es preferible tratar de forma "nativa" con las capacidades del sistema operativo host, que es complicado y propenso a errores (además de las diferencias del sistema operativo, estoy seguro de que varios formatos de sistema de archivos - FAT16 , FAT32, NTFS, versiones de extFS 1/2/3 ... traiga su propio conjunto de reglas para tener en cuenta)

+0

No es una mala sugerencia. Supongo que podría proporcionar la opción. La pregunta a la que se vinculó también menciona que Windows usa ISO-8859-1. – Evert

+0

@Evert no exactamente, el manejo de cadenas de Windows ha estado basado en UTF-16 durante mucho tiempo, hasta donde yo sé, la respuesta afirma * El envoltorio de PHP * a las funciones del sistema de archivos de Windows usa ISO-8859-1. No sé para nada si eso es cierto, pero es posible. –

-2

No es una respuesta, pero ... WinXP está basado en UTF-8 (según Jeffrey) El libro "CLR vía C#" de Richter) y todas las funciones ASCII WinAPI son solo envoltorios para UTF-8 similares.

+4

'WinXP está basado en UTF-8' bollocks. toda la familia WinNT se basa en utf-16 (bueno, casi cierto, nt anterior no maneja sustitutos) – SteelBytes

+0

Oh, realmente lo siento. Lo escribió sin pensar en "..- 8" – kpower

Cuestiones relacionadas