problème de codage du nom de fichier

9

J'obtiens un fichier avec un nom féroïen et j'essaye de l'enregistrer dans un script PHP:

2010_08_Útflutningur.xls

Dans Ubuntu 10.04 LTS l'enregistre comme:

2010_08_�tflutningur.xls (invalid encoding)

J'ai installé et exécuté utf8-migration-tool, mais sans effet.

Est-ce une erreur Ubuntu que je peux corriger ou je dois juste abandonner et modifier le nom en php?

Existe-t-il un document qui indique quel est le jeu de caractères acceptable pour un nom de fichier dans Ubuntu, ou quelles sont les spécifications d'encodage?

Merci

Elzo Valugi
la source
Comment recevez-vous et enregistrez-vous le fichier via PHP? (À quoi ressemble le code?)
Kees Cook
Je l'ai analysé à partir d'un système de messagerie. Le code est complexe :)
Elzo Valugi
Il existe un Q & A similaire avec un script pour réparer les noms de fichiers cassés.
lumbric

Réponses:

5

Cela ressemble à un problème d'encodage. Malheureusement, PHP a besoin d'un peu de prise en main lorsqu'il s'agit d'encodages, car ses chaînes sont d'un octet par défaut. Si vous créez le nom de fichier dans PHP, cela utf8_encode()devrait être utile; notez cependant qu'il suppose un codage ISO-8859-1 pour l'entrée.

D'un autre côté, si vous utilisez le nom de fichier soumis par un client, vous pouvez peut-être demander au client de faire l'encodage pour vous. Cela se fait avec l' accept-charsetattribut de la <form>balise et / ou en définissant le jeu de caractères de la page sur laquelle se trouve le formulaire. Certains clients peuvent utiliser l'un ou l'autre, donc pour de meilleurs résultats, utilisez UTF-8 pour chacun.

eswald
la source
7

Par défaut, Ubuntu utilise UTF-8 pour les noms de fichiers. La plupart des distributions Linux modernes et de nombreux autres systèmes d'exploitation le font (Windows / NTFS est l'exception la plus connue avec UTF-16).

Pour corriger les fichiers dont le nom est mal encodé comme celui que vous montrez, vous pouvez essayer d'utiliser nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

Vous pouvez utiliser les iconvfonctions PHP pour convertir des chaînes (noms de fichiers) d'un encodage à l'autre. Bien sûr, cela nécessite que vous sachiez dans quel encodage ils se trouvent pour commencer.

Pour obtenir les noms de fichiers correctement encodés du client, vous pouvez essayer la technique expliquée par eswald.

JanC
la source