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...