Page 1 sur 1

Upload de fichier avec le caractere ' dans le nom

Posté : 12 avr. 2008, 02:36
par stefane321
Bonjour,

J'ai conçu un Intranet pour un client où il peut uploader des fichiers par un formulaire.

C'est un client très Windows user.

Dans ses noms de fichier il y a des espace, des caractères accentué, des points partout avant l'extension et des espaces.

J'ai donc fait se qu'il faut pour changer ges espaces et les caractères accentués:
		$car_speciaux = array( ' ','À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );

		$car_normaux  = array( '_','A', 'A', 'A', 'A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'E', 'E', 'E', 'E', 'e', 'e', 'e', 'e', 'I', 'I', 'I', 'I', 'i', 'i', 'i', 'i', 'O', 'O', 'O', 'O', 'O', 'O', 'o', 'o', 'o', 'o', 'o', 'o', 'U', 'U', 'U', 'U', 'u', 'u', 'u', 'u', 'B', 'C', 'c', 'D', 'd', 'N', 'n', 'P', 'p', 'Y' ); 

		$_FILES["fichier"]['name'] = str_replace($car_speciaux, $car_normaux, $_FILES["fichier"]['name']);  
Mais là je vois pas comment faire pour changer le caractère ' exemple: L'apastrophe dans le nom d'un fichier.doc

Le guillemet servant de conteneur dans ma fonction si j'y ajoute ''', bien sa fait un erreur.
En ne faisant rien pour une raison que j'ignore lors de l'upload un backslash \ est ajouter dans le nom du fichier.

Et comment puis-je enlever les points sans enlever celui de l'extension.

Merci!

Posté : 12 avr. 2008, 08:16
par Cyrano
échappe le caractère en faisant '\'' tout simplement
$car_speciaux = array( ' ','\'','À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );

$car_normaux  = array( '_','_','A', 'A', 'A', 'A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'E', 'E', 'E', 'E', 'e', 'e', 'e', 'e', 'I', 'I', 'I', 'I', 'i', 'i', 'i', 'i', 'O', 'O', 'O', 'O', 'O', 'O', 'o', 'o', 'o', 'o', 'o', 'o', 'U', 'U', 'U', 'U', 'u', 'u', 'u', 'u', 'B', 'C', 'c', 'D', 'd', 'N', 'n', 'P', 'p', 'Y' ); 

$_FILES["fichier"]['name'] = str_replace($car_speciaux, $car_normaux, $_FILES["fichier"]['name']);

Posté : 12 avr. 2008, 14:54
par caroube
En PHP, tu peux entourer tes chaînes de caractères avec des apostrophes simples ou des apostrophes doubles. Cela n'a pas le même comportement pour l'affichage des variables, mais dans ton cas, cela n'a pas d'importance. Tu peux donc tout à fait écrire :

Code : Tout sélectionner

" ' " : un double, un simple, un double (j'ai mis des espaces uniquement pour la visibilité)
et donc
$car_speciaux = array( ' ',"'",'À', 'Á', 'Â' ...

Posté : 13 avr. 2008, 16:45
par stefane321
Merci!

Maintenant, je ferais comment pour enlever les points dans le nom du fichier sans enlever celui de l'extension.

Dans ma fonction actuel si j'ajoute de remplacer le point il change aussi celui qui délimite le nom du fichier et l'extension

deplus, je me suis rendu compte que l`a ma fonction enlève bel et bien l'apostrophe du nom de fichier cependant le serveur ajoute un \ comme si il fesait un addslashes() avant de traiter l'enlèvement des caractères.