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
Réponses:
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-charset
attribut 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.la source
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
Vous pouvez utiliser les
iconv
fonctions 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.
la source