Recherche de fichiers par nom avec des caractères spéciaux.

Fermé
patrice86
Messages postés
1376
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
5 août 2022
- 18 mai 2017 à 12:41
patrice86
Messages postés
1376
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
5 août 2022
- 18 mai 2017 à 15:43
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 :)

3 réponses

Felice_
Messages postés
265
Date d'inscription
mardi 25 avril 2017
Statut
Membre
Dernière intervention
20 juillet 2017
11
18 mai 2017 à 13:07
Bonjour patrice,

Peut-on voir ton code que tu as créé ?
0
patrice86
Messages postés
1376
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
5 août 2022
126
Modifié le 18 mai 2017 à 14:04
$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
0
Felice_
Messages postés
265
Date d'inscription
mardi 25 avril 2017
Statut
Membre
Dernière intervention
20 juillet 2017
11
18 mai 2017 à 15:04
Dans ton code je ne vois pas où est défini : $fileSource
0
patrice86
Messages postés
1376
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
5 août 2022
126
18 mai 2017 à 15:43
il faut remplacer $fileSource par $fileName je me suis trompé ;)
0
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
543
18 mai 2017 à 14:13
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 :
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,
0
patrice86
Messages postés
1376
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
5 août 2022
126
Modifié le 18 mai 2017 à 15:01
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.
array(1) {
[0]=>
string(104) "/var/XXX/XXXX/cache/dev/../XXXX/Directory/XXXXX/13676_2_Coq Rico Moulin Rouge.png"
}
array(0) {
}

0