Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/12/2010, 11h51   #1
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
Par défaut Lien cassé pour cause de caractères exotiquess

Bonjour,
Voila, j'ai un problème avec mon application PHP. Cet appli sert à partager en ligne des fichiers au sein d'un groupe avec connexion ID/mdp des utilisateurs.

Mon problème est qu'un utilisateur peut importer un nom de fichier sur le serveur avec un "é" ou caractère exotique : pas de problème.
L'affichage de la liste des fichiers, pas de problème non plus.

Mais lorsque l'on essaye de le télécharger via un petit déterminé dynamiquement en php, il remplace le caractère exotique par un
Citation:
"é" ou "°"
, et ne trouve donc pas le fichier en question sur le serveur.

Merci de votre aide !
Gab
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 12h06   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
C'est un problème d'encodage.
Ton "é" c'est de l'UTF8 que tu affiches dans une page écrite en ISO.

Revoit donc l'encodage de tes fichiers .php et de ta page HTML.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 12h14   #3
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
Merci de ta réponse !
Mais je n'arrive pas a avoir le lien quand même.

J'utilise notepad++, et il me dit que mes fichiers sont en ANSI.
Je mets donc "format/ Encoder en UTF8", et réactualise mon serveur.
Mais idem, il me remet le "Â" devant, et me rajoute même "" en haut de ma page web.
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 14h13   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
Mais lorsque l'on essaye de le télécharger via un petit <a href...> déterminé dynamiquement en php, il remplace le caractère exotique par un "é" ou "°"
Quand est-ce que tes caractères accentués sont remplacés par des é & cie ?
Donne la partie du script concernée.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 14h33   #5
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
Alors je le sais car quand je clique sur le lien il m'affiche sur le navigateur avec l'url : http://xxx.fr/ListeFichiers/Base de donnée Planification edt.sql

Citation:
"Not Found

The requested URL /ListeFichiers/Base de donnée Planification edt.sql was not found on this server."
La partie du code html/php concerné :
Code php/html :
$nom='Base de donnée Planification edt.sql';
($nom est issu d'un tableau comprenant tous les noms de fichier du dossier)
Code php/html :
<a href="<?php echo 'ListeFichiers/'.$nom; ?>" target=_blank ><img style="border: none; " src="images/download.png"></a>
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 15h55   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
($nom est issu d'un tableau comprenant tous les noms de fichier du dossier)
D'où vient le tableau ?

Une rustine en attendant d'identifier la source réelle du pb :
Code :
1
2
3
<a href="ListeFichiers/<?php echo utf8_decode($nom) ?>" target=_blank >
<img style="border: none; " src="images/download.png">
</a>
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 16h46   #7
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
J'ai changé le <a> avec ce que tu m'as dit, et maintenant j'ai ca comme erreur :

Citation:
"The requested URL /ListeFichiers/Base de donn was not found on this server."
et l'url : http://xxx.fr/ListeFichiers/Base de donn?Planification edt.sql

Mon tableau vient d'une autre page, passé par une variable SESSION et trié avec la fonction ksort().
Voici le code qui a généré le tableau :

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$chemin ="ListeFichiers";									// On définit le nom du dossier à ouvrir
$nbfichiers=0;
 
// -------------------------------------------------------
// Executer l'action
// ---------------------------------------------------------
$ouvertureDossier=opendir($chemin);							// On ouvre le dossier
 
if ($ouvertureDossier==false) {								// Gestion des erreurs
	echo "Erreur lors de la lecture du répertoire !";
} else {
	$tableau=array();										// Déclaration d'un tableau vide
	$fichier=readdir($ouvertureDossier);					// On lit le 1er fichier dans le dossier
	if (!$fichier) {										// S'il n'y a pas de fichier ...
		echo 'R&eacute;pertoire vide !';					// Erreur : Pas de fichier trouvé !
	} else {
		while ($fichier!=false){							// Tant qu'il y a un fichier ...
			if ($fichier != '.' && $fichier !='..' && !is_dir($chemin.$fichier)) {
				$taillefichier=filesize($chemin."/".$fichier);		// On récupère la taille de chaque fichier
				$tableau[$fichier]=$taillefichier;					// On enregistre das un tableau
				$nbfichiers++;
			}
			$fichier = readdir($ouvertureDossier);					// On lit le fichier suivant
		}
	}
}
closedir($ouvertureDossier);								// On ferme le dossier
if ($nbfichiers==0) {										// Si le dossier ne contient pas de fichiers valides ...
	$_SESSION['msg']='<center><p>L\'espace de partage est vide !</p></center>';		// On envoie un message d'erreur à la vue Elementaire
}
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 16h48   #8
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
Ah et au final je les encode sous quel format ?
Là, j'ai tout remis en ANSI, pour éviter l'affichage : 
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 17h48   #9
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Oui repasse tes scripts en "ANSI".
Quel est le charset de ton serveur web ? La <meta> Content-Type de tes pages ?
Fait un avant l'affichage des liens pour voir si les caractères sont bons.

Que donne ceci si tu le colles sur une de tes pages ?

Code :
echo utf8_decode('/ListeFichiers/Base de donnée') ;
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 18h02   #10
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
le"utf8_decode('/ListeFichiers/Base de donnée')" affiche cela :

Citation:
/ListeFichiers/Base de donnée
Le affiche : un "."

Le meta je l'ai pris je sais pas ou je sais pas sil est juste.
c'est :
Code :
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Quant au charset, je ne sais pas ou le trouver ...
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 18h12   #11
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
Le print_r($fichier); affiche : un "."
$fichiers pas $fichier. Je voulais dire par là qu'il faut afficher le contenu du tableau de fichiers.

Citation:
le "utf8_decode('/ListeFichiers/Base de donnée')" affiche cela :
/ListeFichiers/Base de donnée
OK.

Essaie ceci :

Code :
1
2
3
<a href="ListeFichiers/<?php echo rawurlencode(utf8_decode($nom)) ?>" target=_blank >
<img style="border: none; " src="images/download.png">
</a>
Puis éventuellement :

Code :
1
2
3
<a href="ListeFichiers/<?php echo rawurlencode($nom) ?>" target=_blank >
<img style="border: none; " src="images/download.png">
</a>
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 18h24   #12
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
Alors, le "echo rawurlencode(utf8_decode($nom));"
me renvoi :

Citation:
The requested URL /ListeFichiers/Base de donn?Planification edt.sql was not found on this server.
et l'url : http://xxx.fr/ListeFichiers/Base%20d...tion%20edt.sql


Ensuite le print_r() renvoi :
Code php :
"Array ( [04.11.10 Compte-rendu n°2.pdf] => 240425 [09.12.10 Compte-rendu n°5.pdf] => 185131 [13.10.10 Compte-rendu n°1.pdf] => 137981 [18.11.10 Compte-rendu n°3.pdf] => 271351 [29.11.10 Compte-rendu n°4.pdf] => 224883 [Base de donnée Planification edt.sql] => 98574 [Charte de Projet.docx] => 735898 [Sujet Projet 11.doc] => 27648 ) "

Et le "rawurlencode($nom)" renvoi :
Citation:
You don't have permission to access /ListeFichiers/ on this server
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 20h22   #13
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
et l'url : htp://xxx.fr/ListeFichier/Base%20de%20donn%3FPlanification%20edt.sql
D'où vient l'URL ?
Le "%3F" correspond à l'encodage d'un "?" et pas d'un "é".

Citation:
Et le "rawurlencode($nom)" renvoi :
You don't have permission to access /ListeFichiers/ on this server
Je ne comprends pas pourquoi $nom n'apparaît pas. As-tu bien fait un echo ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h07   #14
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
Super ! c'est nickel ! j'avais juste oublié le echo comme tu avais dit^^

Je peux ouvrir les fichiers c'est nickel, mais par contre, il y a juste un truc, c'est que dans mes fichiers texte (.sql, .txt) il me remplace tous les accents par des :
é

et l'url est : htp://xxx.fr/ListeFichiers/Base%20de%20donn%E9e%20Planification%20edt.sql (je sais pas si ca change quelque chose). Elle est donnée quand je clique sur le lien pour télécharger le fichier, et que firefox m'ouvre le fichier dans le navigateur.

Merci encore pour ces réponses !
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 17h37   #15
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 817
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 817
Points : 3 442
Points : 3 442
Citation:
Je peux ouvrir les fichiers c'est nickel, mais par contre, il y a juste un truc, c'est que dans mes fichiers texte (.sql, .txt) il me remplace tous les accents par des :
é
Fichiers UTF-8 lus en ISO-8859, cela mérite un autre sujet.

Citation:
et l'url est : htp://xxx.fr/ListeFichiers/Base%20de%20donn%E9e%20Planification%20edt.sql (je sais pas si ca change quelque chose). Elle est donnée quand je clique sur le lien pour télécharger le fichier
Normal, une URL ne peut contenir n'importe quel caractère. Les caractères spéciaux sont codés.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 18h23   #16
Invité de passage
 
Gabriel GOURRAT
Inscription : octobre 2010
Messages : 14
Détails du profil
Informations personnelles :
Nom : Gabriel GOURRAT

Informations forums :
Inscription : octobre 2010
Messages : 14
Points : 3
Points : 3
Ok, je vais faire mes recherches pr le reste !!!
et Merci beaucoup !!!!!!!!!!!!
A++
gab.64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h49.


 
 
 
 
Partenaires

Hébergement Web