Page 1 sur 1

accents et espaces

Posté : 08 juin 2006, 15:37
par Chile
Bonjour,
j'ai un ti probleme lorsque j'upload un fichier comportant dans son nom un accent ou espace, et bien ca foire a l'affichage.
J'ai pas trouvé de script remede :? qlq aurait un p'tit code a partager ?
merci

Posté : 08 juin 2006, 17:17
par Chile
j'ai inseré un code pour eliminer les accents, mais il ne les enleve pas :(
voici mon script qui fonctionne bien sinon !
<?php
// je remonte la déclaration avant la récup du fichier 
$nomFichier = ""; // déclaration des variables 
$chemin = ""; 

//Script Upload
//on vérifies que le champ est bien rempli:
if(isset($_FILES["photo"]["name"]))  {
$nomFichier    = $_FILES["photo"]["name"] ;   	//nom du fichier choisi:
$nomTemporaire = $_FILES["photo"]["tmp_name"] ; //nom temporaire sur le serveur:
$typeFichier   = $_FILES["photo"]["type"] ;   	//type du fichier choisi:
$poidsFichier  = $_FILES["photo"]["size"] ;   	//poids en octets du fichier choisit:
$codeErreur    = $_FILES["photo"]["error"] ;   	//code de l'erreur si jamais il y en a une:
	
//chemin qui mène au dossier qui va contenir les fichiers upload:
$chemin = "./images/" ;
	
unset($erreur); 
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'PNG', 'GIF', 'JPG', 'JPEG'); 
$taille_max = 100000; 

// vérifications 
if(($_FILES['photo']['name'] != "")&&( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ) ) 
    { 
$erreur = 'Selectionna un archivo de tipo png, gif, jpg o jpeg !'; 
    } 
    elseif( file_exists($_FILES['photo']['tmp_name']) 
    and filesize($_FILES['photo']['tmp_name']) > $taille_max) 
    { 
$erreur = 'Su archivo no puede tener un peso superior a 100Ko !'; 
    } 
  // derniere verif
    if(!isset($erreur)) 
   { 
    $dest_fichier = basename($_FILES['photo']['name']); 
  // formatage nom fichier 
  // enlever les accents 
    $dest_fichier = strtr($dest_fichier, 
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
  // remplacer les caracteres autres que lettres, chiffres et point par _ 
    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
 //l'upload ! 
      move_uploaded_file($nomTemporaire, $chemin.$nomFichier);		
                    }	
    }
?>

Posté : 08 juin 2006, 17:26
par Ryle
Ton script marche très bien... encore faut il penser à en utiliser le résultat ;)
$dest_fichier = basename($_FILES['photo']['name']);
// formatage nom fichier
// enlever les accents

$dest_fichier = strtr($dest_fichier,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
//l'upload !
move_uploaded_file($nomTemporaire, $chemin.$nomFichier);

Posté : 08 juin 2006, 17:58
par Chile
salut Ryle,
J'ai suivi la piste, et j'ai donc remplacé ma variable
$nomFichier par $dest_fichier , mais ca ni fait rien...
    $dest_fichier = basename($_FILES['photo']['name']); 
  // formatage nom fichier 
  // enlever les accents 
    $dest_fichier = strtr($dest_fichier, 
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
  // remplacer les caracteres autres que lettres, chiffres et point par _ 
    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier); 
//l'upload ! 
      move_uploaded_file($nomTemporaire, $chemin.$dest_fichier); 
les fichiers avec accents passent et donc ne sont pas affichable.

j'ai également essayé l'inverse avec la variable $nomFichier
pour etre en accord avec ligne plus haut
 $nomFichier    = $_FILES["photo"]["name"] ;   	//nom du fichier choisi:
ca marche pas non plus :?

Posté : 08 juin 2006, 19:22
par Ryle
Fais un echo de $dest_fichier tu verras que ta valeur est bonne et que les accents et caractères spéciaux ont été rectifiés :) (et si tu regardes dans le dossier où sont uploadés tes fichiers, leurs noms devraient être correct également)

Je pense que tu regardes le nom dans ta base qui est probablement toujours $nomFichier et non pas celui que tu as obtenu dans $dest_fichier.

La logique voudrait que tu fasses cette modification sur ta variable $nomFichier dès le début de ton script de manière à ce qu'elle soit appliquée non seulement au nom du fichier sur le serveur, mais aussi à celui que tu dois enregistrer plus bas dans ta base ;)

Posté : 08 juin 2006, 22:18
par Chile
exact Ryle, le fichier est bien transferé dans le repertoire avec l'accent qui s'elimine, mais le nom envoyé dans la base conserve l'accent.
J'ai essayé plusieurs manieres d'inserer le script "enlever les accents" en haut de mon code...mais aucun resultat...je bloque !! a l'aide !!! :)
voici la derniere tentative :
<?php
// je remonte la déclaration avant la récup du fichier 
$nomFichier = ""; // déclaration des variables 
$chemin = ""; 

//Script Upload
//on vérifies que le champ est bien rempli:
if(isset($_FILES["photo"]["name"]))  {
$nomFichier = basename($_FILES['photo']['name']);
// formatage nom fichier
// enlever les accents
$nomFichier = strtr($nomFichier,
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$nomFichier = preg_replace('/([^.a-z0-9]+)/i', '_', $nomFichier); 

$nomTemporaire = $_FILES["photo"]["tmp_name"] ; //nom temporaire sur le serveur:
$typeFichier   = $_FILES["photo"]["type"] ;   	//type du fichier choisi:
$poidsFichier  = $_FILES["photo"]["size"] ;   	//poids en octets du fichier choisit:
$codeErreur    = $_FILES["photo"]["error"] ;   	//code de l'erreur si jamais il y en a une:

//chemin qui mène au dossier qui va contenir les fichiers upload:
$chemin = "./images/" ;
	
unset($erreur); 
$extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'PNG', 'GIF', 'JPG', 'JPEG'); 
$taille_max = 100000; 

// vérifications 
if(($_FILES['photo']['name'] != "")&&( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ) ) 
    { 
$erreur = 'Selectionna un archivo de tipo png, gif, jpg o jpeg !'; 
    } 
    elseif( file_exists($_FILES['photo']['tmp_name']) 
    and filesize($_FILES['photo']['tmp_name']) > $taille_max) 
    { 
$erreur = 'Su archivo no puede tener un peso superior a 100Ko !'; 
    } 
 //l'upload ! 
if(!isset($erreur)) { 
      move_uploaded_file($nomTemporaire, $chemin.$nomFichier);		
                    }
    }
?>

Posté : 08 juin 2006, 23:46
par Ryle
ta derniere tentative me semble bonne... tu utilises bien $nomFichier dans ton insert ?

Posté : 09 juin 2006, 00:13
par Chile
oui, par contre je viens de supprimer cette ligne :
if(!empty($_FILES["photo"]["name"])) { 
    $nomFichier    = $_FILES["photo"]["name"] ; // renseignement des variables 
    $chemin = "./images/" ; 
qui se trouvait au dessus de l'insertion dans la base, et tout a l'air de fonctionner ! :) je verrais bien plus tard si ca coince, je sais d'ou ca vient :)
merci pour ta lumiere Ryle !