Page 1 sur 1

Script d'exploration de dossier et caracteres spéciaux

Posté : 30 juil. 2008, 16:21
par titi17s
Bonjour à tous,

j'ai trouver et adapter un script d'exploration pour récupérer les dossiers et fichiers PDF qui sont sur le serveur dans un dossier spécifique.
Après les avoir trouver, il me les affiches sur une page Web.

le problème, c'est que les nom des fichiers et dossiers contiennent de é,è,à,ô...
J'ai trouver la solution pour les afficher correctement sur ma page :htmlentities() mais le souci est que je transforme ces nom de fichiers en liens et que je ne peut pas accéder au fichier PDF car le lien n'est pas bon.
voila le code de ma fonction :
function exploration_dossier($dossier_chemin){
    echo "<ul>";    
    $dossier = opendir ($dossier_chemin);     
    while ($fichier_nom = readdir ($dossier)) {    
        if ($fichier_nom != "." && $fichier_nom != "..") {
            $fichier_chemin = $dossier_chemin.'/'.$fichier_nom;
//nettoyage de caracteres          
  $dossier_chemin1 = htmlentities($dossier_chemin);
           $fichier_nom1 = htmlentities($fichier_nom);
          /*  $dossier_chemin2 = html_entity_decode($dossier_chemin);
            $fichier_nom2 = html_entity_decode($fichier_nom);*/
//test dossier
           if (substr_count($fichier_nom, '.') == "0" && substr_count($fichier_nom, '0')== "0"){
           $h ='<h2 class="title"><u>';
           $hf = '</u></h2>';
                      }
           //test fichier pdf
           if (substr_count($fichier_nom, 'pdf') != "0"){
            $str= " <li><a href=affichage.php?get=$dossier_chemin1/$fichier_nom1&name=$fichier_nom1>$fichier_nom1</a></li>";
            }
            else { 
           $str= "<li>$h $fichier_nom1 $hf</li>"; 
            }
echo $str;
            if(filetype($fichier_chemin) == 'dir'){                
                exploration_dossier($fichier_chemin);               
            }        
        }
    } 
    closedir ($dossier);     
    echo "</ul>";    
}  

si quelqu'un a une idée, je suis preneur
merci

Posté : 30 juil. 2008, 16:46
par Nagol
à priori ton système est en utf8 mais pas ton php, donc pour l'affichage essayes ça
$dossier_chemin1 = utf8_decode($dossier_chemin);
$fichier_nom1 = utf8_decode($fichier_nom);

...(à remplacer par le code manquant)

if (substr_count($fichier_nom, 'pdf') != "0"){
$str= '<li><a href="affichage.php?get='.utf8_encode($dossier_chemin1).'/'.utf8_encode($fichier_nom1).'&name='.utf8_encode($fichier_nom1).'">'.$fichier_nom1.'</a></li>';
} else { 
$str= '<li>'.$h.' '.$fichier_nom1.' '.$hf.'</li>'; 
}


Posté : 30 juil. 2008, 21:01
par titi17s
merci pour ta réponse nagol,
voila le résultat:

Code : Tout sélectionner

# Assembl?_G?rales * 2007 o Avis_de_r?ionAG2007_29_03_2007.pdf o PV_Extrait_15052007.pdf o R?ltat_votesAG2007_05_2007.pdf * 2008 o R?ltats_vote_AGM2008_02_06_2008.pdf o PV_AGM_15052008_12_06_2008.pdf o Avis_de_r?ion_valant_avis2008_04042008.pdf o Date_AG_et_dividendes_11_03_2008.pdf
la a la place des "é" il me met de "?", tu a une idée?
j'avous que je vois pas trop là.
merci

Posté : 30 juil. 2008, 21:08
par titi17s
en fait, le lien qu'il me génére, est le suivant :

Code : Tout sélectionner

doc/info_actionnaires/Assembl%C3%A9es_G%C3%A9n%C3%A9rales/2007/Avis_de_r%C3%A9unionAG2007_29_03_2007.pdf

le lien réel du fichier est le suivant :

Code : Tout sélectionner

doc/info_actionnaires/Assembl%e9es_G%e9n%e9rales/2007/Avis_de_r%e9unionAG2007_29_03_2007.pdf
avec le lien réel, on arrive sur le bon fichier mais pas avec le lien qu'il genere.

merci

Posté : 30 juil. 2008, 21:58
par Nagol
hmm il faudrait que tu puisses nous dire quel est le charset utilisé dans php ainsi que sur ton système. utf8_decode et encode translattent du iso8859-1 vers de l'utf8 et inversement si le charset de départ n'est pas du iso8859-1 alors ca ne va pas marcher, l'autre soucis est qu'on ne peut pas savoir quel charset est utilisé du point de vue du code.

en tout cas htmlentities ne t'aidera clairement pas ici il va faloir débusquer l'information :(

Posté : 31 juil. 2008, 15:16
par titi17s
J'ai appeler mon hébergeur (OVH) ils n'ont pas été capable de me répondre, il va falloir changer de stratégie.
si tu a une idée :

j'ai penser a écrire le nom de mes fichiers en remplaçant les caractères spéciaux par leurs équivalents HTML é => &eacute;
qu'en pense tu?

Posté : 31 juil. 2008, 15:38
par Victor BRITO
Et si, au lieu d'utiliser utf8_decode(), tu éditais directement ton fichier PHP en UTF-8 (mais, sans BOM) ?

Soit dit en passant, puisqu'on est dans le sous-forum PHP 5, pourquoi ne pas utiliser scandir() (fonction proposée par PHP 5, justement) pour explorer les dossiers ? ;) C'est beaucoup plus simple et pratique que le ménage à trois opendir/readdir/closedir.

Posté : 31 juil. 2008, 15:58
par titi17s
oui ok pour scandir() mais il gere les caracteres spéciaux?

Posté : 31 juil. 2008, 16:03
par Victor BRITO
oui ok pour scandir() mais il gere les caracteres spéciaux?
scandir retourne un tableau comportant tous les fichiers et dossiers (ainsi que les "dossiers" . et ..) contenu dans le dossier.

À toi d'essayer. Mais, pourquoi diable insérer des espaces et des caractères spéciaux dans les noms de fichier et de dossier ? |(X

Posté : 31 juil. 2008, 16:08
par titi17s
trés simple, il y a une personne qui va metre des fichiers en ligne via FTP et il faut que ces fichiers apparaisse sur le site.
exemple : un fichier "été2006.pdf" sa m'enbete de le voir écrit "ete2006.pdf"

sur le serveur le fichier est écrit "été2006.pdf" je peut facilement faire en sorte qu'il soit écrit "été2006.pdf" sur ma page mais le lien pour ouvrir ce fichier ne marche pas à cause des accents.

Posté : 31 juil. 2008, 16:15
par Victor BRITO
trés simple, il y a une personne qui va metre des fichiers en ligne via FTP et il faut que ces fichiers apparaisse sur le site.
exemple : un fichier "été2006.pdf" sa m'enbete de le voir écrit "ete2006.pdf"

sur le serveur le fichier est écrit "été2006.pdf" je peut facilement faire en sorte qu'il soit écrit "été2006.pdf" sur ma page mais le lien pour ouvrir ce fichier ne marche pas à cause des accents.
Pour les liens hypertextes vers ces fichiers, tu n'as pas d'autre choix que de les coder (urlencode() fait l'affaire, sauf que tout espace doit être codé sous %20, et non sous +). Autrement dit,

Code : Tout sélectionner

<a href="%C3%A9t%C3%A92006.pdf" type="application/pdf>Fichier PDF été 2006</a>
Encore faut-il que le HTML généré soit codé en UTF-8.

Cela dit, qu'on nomme le PDF ete2006.pdf sans accent n'est en rien pénalisant pour le référencement.

Posté : 31 juil. 2008, 16:24
par titi17s
ce n'est pas pour le référencement cette histoire d'accent mais juste pour que ce soit plus facile a lire.

je vais essayer ce que tu ma dit :
mon fichier s'appelle "été2006.pdf"
je le code avec urlencode() et je vois ce que sa donne.

Posté : 31 juil. 2008, 16:42
par Invité
ça ne marche pas, voila l'url qu'il me genere :

Code : Tout sélectionner

http://www.XXXXXXXX.com/doc/test/%EF%BF%BDt%EF%BF%BD/%E9t%E92006.pdf
au lieu de

Code : Tout sélectionner

http://www.XXXXXXXX.com/doc/test/été/été2006.pdf
le message d'erreur :

Code : Tout sélectionner

Not Found The requested URL /doc/test/�t�/été2006.pdf was not found on this server.
:cry: [/code]

Posté : 31 juil. 2008, 16:50
par Victor BRITO
Dans ce cas, ne te casse pas la tête : dis à celui qui uploade ses PDF sur le FTP de les nommer sans caractères spéciaux ni espaces.

Posté : 31 juil. 2008, 17:09
par titi17s
je pense en effet que c'est la seulle solution. :?

Merci de ton aide