Nom de fichier contenant des caractères nationaux

Eléphanteau du PHP | 37 Messages

15 mars 2011, 01:03

Bonjour,

Je continue le sujet abordé à la fin de mon précédent post.

Dans la mesure où je dois enregistrer un fichier dont le chemin et le nom peuvent contenir des caractères nationaux spécifiques (français, portugais, tchèques...), comment dois-je procéder pour que

1. le chemin soit accepté par php au moment de l'exécution du script,

2. les caractères soient restitués dans le chemin et le nom sous leur forme naturelle (par exemple, ç et non ç) ?

Est-ce qu'il faut systématiquement convertir le chemin et le nom de fichier en UTF-8 ?
Faut-il utiliser un autre procédé de conversion ?

Merci grandement de votre aide :)

ViPHP
xTG
ViPHP | 7331 Messages

15 mars 2011, 08:55

C'est une hérésie de vouloir stocker une telle information dans le système de fichier. Tu auras forcement des soucis.
Le mieux serait de renommer le fichier mais de garder le nom de fichier uploadé dans une table de la base de donnée, ou dans un fichier listant les fichiers.

Eléphanteau du PHP | 37 Messages

15 mars 2011, 13:21

Bonjour,

Excuse-moi d'insister.

Il y a sans doute un grand nombre de personnes dans le monde (quelques centaines de millions ?) qui utilisent leur langue naturelle pour nommer un fichier, parfois en mixant les caractères.
Par exemple, je peux avoir un document intitulé "Présentation du marché français - Русская версия.html" avec des caractères français et russes, et ce fichier est ouvert sans problème par mon navigateur qui affiche le nom du fichier tel quel dans la barre d'adresse.

D'autre part, quand on enregistre un fichier sous un nom contenant des caractères naturels nationaux (é è à ù ç ... pour le français), on s'attend à ce que le nom du fichier contienne effectivement ces caractères et non leur code.

Comme je l'indiquais, je ne suis absolument pas maître du nom de fichier reçu dans la variable $nom_fichier et dois générer un fichier dont le nom correspond bien à ce qui a été saisi, peu importe la langue dans laquelle le nom est saisi.

La piste que je dois creuser est de savoir quel codage international est utilisé pour les noms de fichiers et comment s'assurer sous php que les caractères composant le nom et le chemin du fichier sont bien restitués sour leur forme naturelle.

Quelles sont donc en php les fonctions de codage à utiliser ? :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 mars 2011, 13:41

salut,

si tu met des espace dans ue url ils vont être "convertis" en %20 effectivement ça fonctionne mais ce n'est pas une bonne.

je pense pas que laisser autant de possibilité aux utilisateurs soit une bonne idée.

tu peut très bien gérer comme tu le souhaite la structure et les noms des fichiers (par exemple avec des index). Pour cela une table ou deux tables sql (pourquoi pas utiliser sqlite), dans les tables tu met le nom réél du fichier (celui qui est fournit à l'upload ?) et tu nomme le fichier réel avec l'index de la table (tout en gardant l'extension ou pas ;)).
ainsi tu t'affranchis du problème de caractère sur le système de fichier.
l'avantage de ce système est que l'appli reste maitre de ce qui se passe et tu ne tombe sur des cas"foireux" (que ce passe t il si le fichier commence par un point ?).

Par contre oui il va te falloir utiliser UTF-8 pour utiliser toutes sortes de caractères (latin, cyrillique, arabe etc).

@+
Il en faut peu pour être heureux ......