Recherche de fichiers par nom avec des caractères spéciaux.
patrice86
Messages postés
1380
Date d'inscription
Statut
Membre
Dernière intervention
-
patrice86 Messages postés 1380 Date d'inscription Statut Membre Dernière intervention -
patrice86 Messages postés 1380 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je dispose de fichier sur mon serveur (pdf, bmp, doc, jpg...) qui parfois contiennent des ? à la place des accents et caractères spéciaux.
exemple: Art Mongolfi?res.doc
J'ai un script PHP qui est censé retrouver les fichiers par leur nom.
Au moment où il doit retrouver les fichiers avec des ?, il ne les trouve pas. Pourtant le nom recherché est le bon.
exemple: je recherche le nom de fichier Art Mongolfi?res.doc (qui existe bien sur le serveur comme expliqué au début de mon message) mais il ne le trouve pas.
Une idée ? Le ? ne semble pas interprété correctement lors de la recherche. Je veux dire par là qu'il semble être interprété plutôt que chercher comme une 'lettre'.
Merci :)
Je dispose de fichier sur mon serveur (pdf, bmp, doc, jpg...) qui parfois contiennent des ? à la place des accents et caractères spéciaux.
exemple: Art Mongolfi?res.doc
J'ai un script PHP qui est censé retrouver les fichiers par leur nom.
Au moment où il doit retrouver les fichiers avec des ?, il ne les trouve pas. Pourtant le nom recherché est le bon.
exemple: je recherche le nom de fichier Art Mongolfi?res.doc (qui existe bien sur le serveur comme expliqué au début de mon message) mais il ne le trouve pas.
Une idée ? Le ? ne semble pas interprété correctement lors de la recherche. Je veux dire par là qu'il semble être interprété plutôt que chercher comme une 'lettre'.
Merci :)
A voir également:
- Nom de fichier avec caractères spéciaux
- Caractère spéciaux - Guide
- Fichier bin - Guide
- Caractères spéciaux - Guide
- Fichier epub - Guide
- Caractères spéciaux mac - Guide
3 réponses
$fs = new Filesystem(); $search = array('é','è','°','ô'); $fileName = str_replace($search, '?',$row['fileName']); $fileName = str_replace('&', '&',$fileName); if ($fs->exists($fileSource)) { .... } else { dump('KO'); }
La ligne qui plante est celle de la condition du if.
- $row['fileName'] est le nom du fichier tel qu'il est enregistré dans la BDD MySql. En l'occurence, il est enregistré Art Mongolfières.doc
- $fileName contient le nom du fichier que $fs doit retrouver sur le serveur.
Sur le serveur, le dossier est affiché sous le nom Art Mongolfi?res.doc
A la base je pensais que le ? était dans le nom du fichier, d'où le fait que je fais des str_replace pour que $fileName contienne le même nom que celui afficher sur le serveur.
Mais maintenant je pense qu'il s'agit en fait d'une mauvaise lecture du serveur pour les noms de fichiers avec des accents et caractères spéciaux. Comme si il s'agissait d'une erreur d'encodage.
Pour information, je développe sous Symfony 3.2
Salut,
Si le problème d'affichage des caractères spéciaux de nom de fichier provient du logiciel que tu utilises pour consulter les fichiers du serveur, les fichiers sont donc correctement nommés sur le serveur et tu n'as donc pas besoin d'utiliser de str_replace.
Tu peux essayer d'afficher les fichiers du dossier via php pour voir s'ils sont correctement nommés du coté php. Par exemple :
Une solution alternative mais qui demande quelques modifications serait de renommer les fichiers lors de l'upload. On recommande en général d'éviter les espaces et les caractères spéciaux dans les noms de fichier pour le web et puisque tu utilises une bdd, tu pourrais conserver le nom original dans celle-ci si besoin.
Bonne journée,
Si le problème d'affichage des caractères spéciaux de nom de fichier provient du logiciel que tu utilises pour consulter les fichiers du serveur, les fichiers sont donc correctement nommés sur le serveur et tu n'as donc pas besoin d'utiliser de str_replace.
Tu peux essayer d'afficher les fichiers du dossier via php pour voir s'ils sont correctement nommés du coté php. Par exemple :
var_dump(glob('chemin/vers/le/dossier/*'));
Une solution alternative mais qui demande quelques modifications serait de renommer les fichiers lors de l'upload. On recommande en général d'éviter les espaces et les caractères spéciaux dans les noms de fichier pour le web et puisque tu utilises une bdd, tu pourrais conserver le nom original dans celle-ci si besoin.
Bonne journée,
Bonjour,
J'ai mis en place le str_replace car justement avec les accents il ne trouvait pas le fichier.
Concernant le renommage des fichiers lors de l'upload, il est pris en compte dans la nouvelle version du logiciel pour ne pas avoir ce genre de soucis. Là je suis sur l'ancienne version qui a cette erreur donc je ne dois faire avec malheureusement :/
Pour le glob, il n'affiche pas les fichiers avec des accents.
Il affiche un tableau vide tandis que pour les fichiers sans accents il affiche le nom sans soucis.
J'ai mis en place le str_replace car justement avec les accents il ne trouvait pas le fichier.
Concernant le renommage des fichiers lors de l'upload, il est pris en compte dans la nouvelle version du logiciel pour ne pas avoir ce genre de soucis. Là je suis sur l'ancienne version qui a cette erreur donc je ne dois faire avec malheureusement :/
Pour le glob, il n'affiche pas les fichiers avec des accents.
Il affiche un tableau vide tandis que pour les fichiers sans accents il affiche le nom sans soucis.
array(1) {
[0]=>
string(104) "/var/XXX/XXXX/cache/dev/../XXXX/Directory/XXXXX/13676_2_Coq Rico Moulin Rouge.png"
}
array(0) {
}