Bonjour à tous,

Je suis en train de construire un site web bilingue avec une grosse interface administration. Je travaille en local (wampServeur / mySQL 5.5.16 et php 5.3.8).

Et là, je m'arrache les cheveux depuis des heures avec un formulaire contenant un upload.

Tout est maintenant en utf-8 grâce aux divers tutos lus avec intérêt sur ce site :
- l'entête html
- les balises méta
- l'encodage dans notepad
- la table et ses colonnes dans la BDD

Donc maintenant, quand je clique sur été2011.jpg par exemple, ça envoit bien été.jpg à la base de données.

Mais par contre, il semblerait que windows ne comprenne pas l'utf-8 (il doit être en 1258 d'après ce que j'ai lu). Dans mon dossier de destination, il est écrit : été2011.jpg

Du coup, ça ne peut pas afficher l'image, puisque le nom de l'image dans la BDD n'est pas le même que celui du dossier de destination Smiley decu

Si quelqu'un avait une idée, je lui en serai infiniement reconnaissante parce que là, je vais bientôt plus avoir de cheveux ... Smiley biggrin


Edit : en fait, j'imagine qu'il faudrait que je précise qqch dans le code ci-dessous pour que ça envoie à windows en iso-8859-1 puisqu'il interprète bien cet encodage :

// enregistrement du fichier image dans le repertoire
		$tempfile = $_FILES['PHOTO1']['tmp_name'];
		move_uploaded_file($tempfile, $repPhotos.$PHOTO);


mais quand je passerai en ligne, mon serveur sera sous linux, donc en utf-8.... ... ... ...
Modifié par StephBretagne (22 Mar 2012 - 18:16)
Bonjour,

Je ne sais pas si c'est une limite qui peut être aujourd'hui dépassée sur tous les systèmes d'exploitation (dont Windows XP...), mais de manière générale on recommande fortement de n'utiliser que des caractères ASCII pour les noms de fichier d'un site web, et d'éviter les espaces. Donc en gros se limiter à a-z (de préférence en minuscules) et aux caractères - et _ comme séparateurs.
Bonjour fvsch,

Merci pour ta réponse Smiley smile

Je suis bien d'accord et moi-même je n'ai que des fichiers images parfaitement formatés.
Par contre, je ne pense pas que ce soit le cas pour la personne qui utilisera le système et qui n'a AUCUNE compétence en informatique...
Salut,

La liste que tu dresses pousse à chercher dans les détails puisque les problèmes courants sont hors-jeu.
As-tu vidé ton cache par exemple? Cela dit c'est vrai qu'en général on ne met pas d'accent dans les noms de fichiers.

Mais ton client a vraiment exigé de mettre les accents? Sinon il y a des petits logiciels qui permettent de renommer en masse les fichiers.
Modérateur
Bonjour,

StephBretagne a écrit :

Par contre, je ne pense pas que ce soit le cas pour la personne qui utilisera le système et qui n'a AUCUNE compétence en informatique...


Il suffit de faire en sorte que le système élimine les accents dans le nom des fichiers lors de l'upload. (ex. : remplacer é par e, à par a, les espaces par des tirets, lettres majuscules par lettres minuscules, etc.)
Modifié par Tony Monast (23 Mar 2012 - 15:36)
a écrit :
Il suffit de faire en sorte que le système élimine les accents dans le nom des fichiers lors de l'upload. (ex. : remplacer é par e, à par a, les espaces par des tirets, lettres majuscules par lettres minuscules, etc.)


Tu as raison Tony Smiley smile c la solution à laquelle j'essaie d'aboutir depuis un moment, mais c pas encore ça...

Si je mets :

function stripAccents($PHOTO){
		return strtr($PHOTO,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ', 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
		}
		$PHOTO = str_replace('','',$PHOTO);
		$PHOTO = stripAccents($PHOTO);


au lieu d'été2011.jpg, ça me met uotuo2011.jpg donc, ça remplace é par uo, bizarre non ?
Modifié par StephBretagne (23 Mar 2012 - 15:44)
StephBretagne a écrit :
donc, ça remplace é par uo, bizarre non ?

Bienvenue dans le monde merveilleux de PHP. Smiley smile
Ton fichier PHP est sans doute en UTF-8. Donc ton caractères "é" représente deux octets.
Dans le code suivant:
strtr($lol,'àé', 'ae');
la première chaine fait 4 octets, et la deuxième deux octets. PHP va remplacer les deux octets de "à" par "ae" (les deux premiers octets de la deuxième chaine), et "é" par "".

Pour éviter ce problème il faut utiliser des Array plutôt que des chaines (ou quelque chose comme ça, je connais mal PHP et strtr). <trolldÿ>Ou bien utiliser un langage mieux fichu, tel que Python.</trolldÿ>

Sinon, il y a très probablement des classes PHP de translittération qui existent. Ça te permettra d'utiliser quelque chose de plus exhaustif que ton code, et d'étudier les solutions techniques de la classe. Smiley smile
Ah oui mais c'est bien sûr Smiley smile Smiley smile Smiley smile

Je vais me pencher dessus dès que j'aurai un moment et je vous tiens au courant.

Merci pour la piste !
Et bien voilà, j'ai trouvé mon bonheur, sur ce site même !!! Smiley smile

Donc, en utilisant la fonction de Heyoan que l'on peut trouver ici ça marche !

function oteAccents($str) {
$translit =     	array('Á'=>'A','À'=>'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','á'=>'a','à'=>'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');

$str = strtr($str, $translit);

return preg_replace('#[^a-zA-Z0-9\-\._]#', '_', $str);
}
$PHOTO = oteAccents($PHOTO);


Donc, un super merci à tout le monde pour m'avoir si bien orientée et bonne fin de we à tous. Smiley biggrin