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

Fermé
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 18 mai 2017 à 12:41
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 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 :)
A voir également:

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 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
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 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
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 524
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 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
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