IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Accents dans les noms de fichier


Sujet :

Langage PHP

  1. #1
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut Accents dans les noms de fichier


    tiens c'est marrant ca, je viens pour poser ma question et hop hop que vois-je en haut de forum :
    http://www.developpez.net/forums/d52...-php6-unicode/

    unicode partout, ca m'aurait bien simplifié la vie ca.

    bref j'arrive sur un projet que je ne connais pas

    un script php génère une page html contenant une liste de liens vers des fichiers lu sur le disque.

    jusque là rien de bien folichon

    par contre on voit du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<a href="'.$filename.'">'.$filename.'</a>';
    or si le fichier s'appelle "monfichier_avec àccent.txt"

    paf ca déconne => le lien créé par php génère une erreur 404 au lieu de pointe sur le fichier

    j'ai testé de passer le href au htmlentities(), utf8_encode(), rawurlencode()

    bizarrement rien ne marche. Dans le apache directory listing le lien attendu est

    monfichier_avec%20%e0ccent.txt

    pourtant au mieux j'arrive à

    monfichier_avec%20%C3%A0ccent.txt

    pk le à donne %e0 sous apache au lieu de %C3%A0
    je sens que c'est encore une histoire de jeu de caractère, or je ne trouve pas de listing contenant le %e0 pour savoir de quel jeu il s'agit...

    qqn a une idée?

  2. #2
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Points : 6 506
    Points
    6 506
    Par défaut
    Bonjour,

    tu as essayé d'utiliser la fonction urlencode() en php ? Pour encoder tes url et ne plus avoir ce genre de problème ?

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="'.urlencode($filename).'">'.$filename.'</a>';
    Ca te remplacera tous les caractères (espaces, accent, ...) en valeur %20%....

  3. #3
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    bien vu le urlencode(), c'est bien le seul que je n'avais pas testé.

    d'ailleurs ca marche presque :

    blablablaavec àccent.txt

    devient

    blablablaavec+%E0ccent.txt

    => erreur 404

    le server attend un

    blablablaavec%20%E0ccent.txt

    donc ca m'a correctement convertit le à mais pas le symbole espace. Le symbole espace est devenu + au lieu de %20
    ce qui semble normal
    => http://fr.php.net/manual/en/function.urlencode.php

    je suppose qu'à coups de str_replace('+', '%20', $link) ca va marcher

    cela dit je trouve ca assez peu élégant. De plus, j'ai pas mal l'impression que cette manipulation d'url sur les caractères spéciaux en php est due principalement à config apache un peu batarde/bancale. Et je crains que si un bbeau jour l'admin change la config d'apache, le code apache de construction des liens s'en trouve cassé.

    => qu'en pensez-vous ?

    n'y a-t'il pas une manière d'utiliser les fonctions de base de php pour avoir un url vers un fichier avec accès
    1) (tres) simple
    2) qui résiste aux changements de config apache autour des jeux de caractères dans la construction des url

  4. #4
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    si ca peut servir à qqn un jour, je précise que la suggestion de jsd03 avec du str_replace m'a permis de résoudre le truc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        /** 
         * corrige le pb de liens cassés sur fichiers avec accents
         */
        public function myurlencode($str) {
            $res = urlencode($str);
            $res = str_replace('+', '%20', $res); // pour le symbole espace, on met un %20 au lieu du +
            $res = str_replace('%2F', '/', $res); // pour le symbole / convertit en %2F, on remet un /
            return $res;
        }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Remplacer les accents dans plusieurs noms de fichiers
    Par lyko94 dans le forum Général Python
    Réponses: 13
    Dernier message: 04/07/2014, 09h58
  2. les accents dans les noms de fichier
    Par mariesss dans le forum Débuter
    Réponses: 3
    Dernier message: 04/08/2013, 13h32
  3. Réponses: 8
    Dernier message: 10/03/2010, 15h51
  4. comment enlever les accents dans un nom de fichiers ?
    Par clavier12AZQSWX dans le forum Administration système
    Réponses: 6
    Dernier message: 23/09/2009, 06h47
  5. Samba et les accents dans les noms de fichiers
    Par totofweb dans le forum Réseau
    Réponses: 1
    Dernier message: 19/08/2007, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo