Recibo un archivo con un nombre faroese e intento guardarlo en un script PHP:
2010_08_Útflutningur.xls
En Ubuntu 10.04 LTS lo guarda como:
2010_08_�tflutningur.xls (invalid encoding)
He instalado y ejecuto utf8-migration-tool
, pero sin efecto.
¿Es este un error de Ubuntu que puedo solucionar o solo tengo que renunciar y modificar el nombre en php?
¿Hay un documento que indique cuál es el juego de caracteres aceptable para un nombre de archivo en Ubuntu, o cuáles son las especificaciones de codificación?
Gracias
Respuestas:
Esto parece un problema de codificación. Desafortunadamente, PHP necesita un poco de mano cuando se trata de codificaciones, porque sus cadenas son de un solo byte por defecto. Si está creando el nombre de archivo dentro de PHP,
utf8_encode()
debería ser útil; tenga en cuenta, sin embargo, que supone la codificación ISO-8859-1 para la entrada.Por otro lado, si está utilizando el nombre de archivo enviado por un cliente, tal vez pueda solicitar que el cliente haga la codificación por usted. Eso se hace con el
accept-charset
atributo de la<form>
etiqueta, y / o configurando el juego de caracteres de la página en la que se encuentra el formulario. Ciertos clientes pueden usar uno u otro, por lo que para obtener mejores resultados, use UTF-8 para cada uno.fuente
Por defecto, Ubuntu usa UTF-8 para los nombres de archivo. La mayoría de las distribuciones de Linux modernas y muchos otros sistemas operativos lo hacen (Windows / NTFS es la excepción más conocida con UTF-16).
Para arreglar archivos que tienen nombres en la codificación incorrecta como la que muestra, puede intentar usar
nautilus-filename-repairer
Puede usar las
iconv
funciones de PHP para convertir cadenas (nombres de archivo) de una codificación a la otra. Por supuesto, eso requiere que sepas en qué codificación están para empezar.Para obtener nombres de archivo codificados correctamente del cliente, puede probar la técnica explicada por eswald.
fuente