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 :

Problème upload de fichier avec accent et firefox [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut Problème upload de fichier avec accent et firefox
    Bonjour à tous,

    Je bloque sur un problème assez énervant (pour rester poli) qui n'apparaît que sous Firefox.

    En fait, je suis en train de créer un formulaire d'upload de photo et je ne souhaite pas stocker des photos avec accent, pour cela je me suis fait une petite fonction qui transforme mon nom de fichier "francais" en nom de fichier tout ce qu'il y a de plus "ascii" .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function clean_french_string($str){
        $search  = array('à','á','â','ã','ä','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ', 'À','Á','Â','Ã','Ä','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý');
        $replace = array('a','a','a','a','a','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','u','u','u','u','y','y', 
            'A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','U','U','U','U','Y');
        $str = str_replace($search, $replace, $str);
    return $str;
    }
    J'aurai pu aussi utiliser preg_replace, je sais mais bon, j'ai testé j'ai le même problème.

    Voici le code de mon formulaire HTML (la page est encodée en utf-8):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form method="post" 
        action="http://www.lienvers.com/monfichier.php" enctype="multipart/form-data">    
              <input type="hidden" name="MAX_FILE_SIZE" value="2097152">    
              <input type="file" name="image">   
              <input type="submit" value="Envoyer">   
    </form>
    Et voici comment je traite le fichier côté php (fichier php encodé en UTF-8 lui aussi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $real_name = $_FILES['image']['name'];
    print("Filename before = " . $real_name);
    $new_name = clean_french_string($real_name);
    print("\nFilename after = " . $new_name);
    Je fais d'autres traitements sur mon image mais ils ne sont pas importants.

    Maintenant, testez cela dans firefox 4 avec un fichier qui comporte des accents dans le nom et vous verrez qu'il ne fait rien!!
    En tout cas, ça me fait ça sous Mac OS.

    J'ai testé avec Chrome, ça marche, j'ai testé sous IE 8 ça marche aussi...

    Ce qui m'intrigue le plus c'est que lorsque je fais un mb_detect_encoding sur mon nom de fichier, il détecte bien qu'il est en UTF-8.

    Quelqu'un a déjà eu ce problème ? Est-ce que ça vient de ma version de PHP qui est trop vieille (5.2.4) ? Est-ce que ça vient la fonction que j'utilise ? Ou autre ?

    Je précise aussi que quand j'enregistre le fichier sur le disque dur, le nom n'est pas bon, par exemple si j'ai un fichier qui s'appel "Rémi.png" (et qu'il s'affiche comme tel quand je fais un print) il s'enregistrera sous "ReÌmi.png", ce qui fait tout de même penser à un problème d'encodage...

    Merci à vous,
    Andréas

    P.S : J'ai le même problème quand le fichier est contenu dans une archive et là ce me le fait même avec Chrome, étrange...

  2. #2
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Que vaut $str avant de passer dans clean_french_string() ?

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Oui apparemment c'est un problème d'encodage dans ta page. Il doit manquer une étape dans ton script pour un encodage cohérent du début à la fin de ton code. Un tuto ici

    Sinon je viens de poster une classe d'upload facilement paramétrable et prête à l'emploi. Le dernier exemple est en utf-8. Tu peux regarder ou utiliser la classe car elle fait les mêmes remplacements que les tiens (même un peu plus).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Merci pour vos réponses .

    Que vaut $str avant de passer dans clean_french_string() ?
    Quand je fais un print, ça m'affiche le bon nom avec les accents. Et quand j'affiche l'encodage avec mb_detect_encoding, la chaine est bien reconnue comme étant en UTF-8.

    Oui apparemment c'est un problème d'encodage dans ta page. Il doit manquer une étape dans ton script pour un encodage cohérent du début à la fin de ton code. Un tuto ici
    Merci pour le tuto, mais mon cas est assez simple, il n y a même pas de base mysql. J'ai ma page html en UTF-8 (j'ai vérifié les entête http et elles sont bien en UTF-8) et mon fichier php qui est lui aussi bien encodé en UTF-8.

    Sinon je viens de poster une classe d'upload facilement paramétrable et prête à l'emploi. Le dernier exemple est en utf-8. Tu peux regarder ou utiliser la classe car elle fait les mêmes remplacements que les tiens (même un peu plus).
    Oulà, 1200 lignes pour gérer l'upload d'image et le redimensionnement, non merci . Je fais ça en moins de 200 lignes et encore c'est parcequ'il y a une gestion des d'archives. Bon, c'est sûrement moins complet que ta classe, mais je ne pense pas avoir besoin de tout ça.

    Je vais quand même tester voir si j'ai le même problème, je te dirai.

    Encore merci à vous, je pense que je vais laissé décanter et bosser sur d'autre chose avant de revenir à ce problème car ça m'a vraiment "frustré"! Le pire c'est que ça me fait ça que sous firefox!

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par dedesite Voir le message
    Oulà, 1200 lignes pour gérer l'upload d'image et le redimensionnement...
    Oui enfin y'a beaucoup d'espaces (pour la lisibilité) et aussi beaucoup d'automatismes pour permettre une utilisation facile et rapide avec pas mal de possibilités et accessible au néophyte. Ceci expliquant cela

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 76
    Points
    76
    Par défaut
    Ca y est j'ai trouvé!

    Enfin, je n'ai toujours pas compris ce qu'il se passait mais grâce à ton code ABCIWEB ça marche!

    En fait, j'ai regardé ta fonction de renommage et elle est quasiment pareille, sauf que tu as rajouté ça après le str_replace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nom_fichier = preg_replace('#[^.a-z0-9_-]+#i', '', $nom_fichier);
    Code qui enlève tous les caractères non ASCII en gros et si je rajoute ça à mon code, ça marche sous tous les navigateurs!!

    J'ai testé sous firefox en ne laissant que le preg_replace et ça marche! J'en déduis que contrairement à ce que php me dit, ma chaîne n'était pas vraiment encodée en UTF-8 car le str_replace ne faisait rien.

    Bref, je ne comprend pas tout mais ça marche et c'est l'essentiel .

    Citation:
    Envoyé par dedesite Voir le message
    Oulà, 1200 lignes pour gérer l'upload d'image et le redimensionnement...

    Oui enfin y'a beaucoup d'espaces (pour la lisibilité) et aussi beaucoup d'automatismes pour permettre une utilisation facile et rapide avec pas mal de possibilités et accessible au néophyte. Ceci expliquant cela
    Oui, c'est sûr que c'est on ne peut plus "didactique" comme code, mais ce n'est pas ce dont j'avais besoin. Puis tout de même la longueur rajoute forcément de la complexité .

    Merci à vous et bonne journée,
    Andréas

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Bah oui ça rajoute de la complexité dans le code interne à la classe, mais c'est au bénéfice de la simplicité du code final externe nécessaire pour paramétrer les fonctions. Enfin bon l'important est que ton pb soit résolu. Bon après midi

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

Discussions similaires

  1. Problème nom fichier avec accent Mac -> Windows
    Par shinchan dans le forum Mac OS X
    Réponses: 5
    Dernier message: 26/08/2013, 21h14
  2. Réponses: 2
    Dernier message: 26/08/2009, 09h34
  3. Upload de fichier avec jsp
    Par fx2024 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/06/2006, 17h02
  4. [Upload] Upload de fichier avec un script PHP
    Par largolgd dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2006, 15h21
  5. [C#] PRoblème d'écriture d'un fichier avec accent
    Par shinchan dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/04/2006, 09h13

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