Le caractère ‘ dans les noms de fichiers pour un formulaire d’upload

J’ai écrit il y a quelques mois déjà une petite appli visant à aider le service des marchés publics dde l’Université d’Auvergne, dans son processus de dématèrialistaion des marchés. En gros Un outil en Intranet avec fonctionnalités CRUD (Create Read Update Delete) permettant de gérer des marchés et leur état (appel d’offres, en cours, terminé).
Pour un marché on peut attahcer des fichiers, via un formulaire d’upload HTML.
Du genre:

<form id="FileForm" action="MarcFileCopy.php"
method="POST"  Enctype="multipart/form-data">
   Titre : <input type="text" name="Titre" size="50" />
   <input type="file" id="Fichier" name="Fichier" value="" size="80" />
   <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
   <input type="hidden" name="SubFile" value="Soumettre" />
   </form>

Il se trouve que le service des marchés utilisent, de manière réccurrente, des caractères spéciaux dans leur nom de fichier, ce qui fait éventuellement des urls encodés d’une part pas belle te qui selon les caractères fonctionnent plus ou moins … Pour tout ce qui est caractère alphabétique et espacement, j’ai fait une fonction qui les chasses avant la copie du fichier sur le serveur du genre :

function antiSpecialChars($filename)
{
   $temp = $filename;
   $pattern = "[àâ]";
   $temp = eregi_replace($pattern,"a",$temp);
   $pattern = "[éèêë]";
   $temp = eregi_replace($pattern,"e",$temp);
   $pattern = "[î]";
   $temp = eregi_replace($pattern,"i",$temp);
   $pattern = "[ô]";
   $temp = eregi_replace($pattern,"o",$temp);
   $pattern = "[ ]";
   $temp = eregi_replace($pattern,"_",$temp);
   return $temp;
}

Jusque là tout va bien! Le problème est que parmis les caractères spéciaux il en est un qui est utilisé et qui pose plus problème que les autres c’est le ‘ (lire « prime »). L’utilisation de ce caractère dans un nom de fichier à uploader fait que la variable $_FILES['Fichier']['tmp_name'] qui contient normalement le nom du fichier à uploader est vide …
Il n’ya donc pas moyen d’utiliser la fonction antiSpecialChars() sus citée pour l’éliminer.
Donc il faut agir avant le traitement du fichier, donc juste avant la soumission du formulaire, donc c’est avec JavaScript que ca va se passer.
Il faut récupérer le nom du fichier

filename = document.getElementById('Fichier').value;

le traiter

tmp = filename.replace("'","_");

et réassigner avec un truc du genre

document.getElementById('Fichier').value = filename;

Mais ca évidemment ca ne marche pas. C’est du bon sens, puisque le formulaire ne serait plus capable de localiser le fichier à uploader, puiqu’il n’aurait plus le bon nom!!
Bref, la feinte que j’ai trouvé est de passer par une variable cachée

<input type="hidden" id="FichierNom" name="FichierNom" value="" />

qui me permettra de stocker le nom du fichier sans le ‘ et je pourrais ainsi m’en servir pour la copie physique du fichier sur le serveur, à la place de $_FILES['Fichier']['tmp_name'] qui elle est toujours vide!
Le problème est que dans tp je n’ai pas le nom du fichier mais sont path entier, donc je récapitule tout dans une fonction, qu’il n’y a qu’à mettre sur un évènement JavaScript du genre le onSubmit du formulaire …

function checkChars()
{
   filename = document.getElementById('Fichier').value;
   tmp = filename.replace("'","_");
   tmp2 = tmp.split("\\");
   tmp = tmp2.pop();
   document.getElementById('FichierNom').value = tmp;
}
  • del.icio.us
  • Twitter
  • Facebook
  • Tumblr
  • FriendFeed
  • LinkedIn
  • MySpace
  • StumbleUpon
  • Digg
  • Google Bookmarks
  • MSN Reporter
  • Netvibes
  • Ping.fm
  • Wikio FR
  • Reddit
  • Scoopeo
  • Slashdot
  • email
  • PDF
  • Print

poster un commentaire

votre email ne sera jamais publié ou communiqué. les champs obligatoires sont marqués par une *

*
*