IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Lien cassé pour cause de caractères exotiquess


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    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
    "é" ou "°"
    , et ne trouve donc pas le fichier en question sur le serveur.

    Merci de votre aide !
    Gab

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    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.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    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.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    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.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    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

    "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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="<?php echo 'ListeFichiers/'.$nom; ?>" target=_blank ><img style="border: none; " src="images/download.png"></a>

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    ($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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="ListeFichiers/<?php echo utf8_decode($nom) ?>" target=_blank >
    <img style="border: none; " src="images/download.png">
    </a>

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    "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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    }

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Ah et au final je les encode sous quel format ?
    Là, j'ai tout remis en ANSI, pour éviter l'affichage : 

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    echo utf8_decode('/ListeFichiers/Base de donnée') ;

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    le"utf8_decode('/ListeFichiers/Base de donnée')" affiche cela :

    /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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    Quant au charset, je ne sais pas ou le trouver ...

  11. #11
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Le print_r($fichier); affiche : un "."
    $fichiers pas $fichier. Je voulais dire par là qu'il faut afficher le contenu du tableau de fichiers.

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

    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="ListeFichiers/<?php echo rawurlencode($nom) ?>" target=_blank >
    <img style="border: none; " src="images/download.png">
    </a>

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Alors, le "echo rawurlencode(utf8_decode($nom));"
    me renvoi :

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    "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 :
    You don't have permission to access /ListeFichiers/ on this server

  13. #13
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    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 "é".

    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 ?

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    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 !

  15. #15
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    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.

    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.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Ok, je vais faire mes recherches pr le reste !!!
    et Merci beaucoup !!!!!!!!!!!!
    A++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Lien cassé pour télécharger Lazarus
    Par dragonno dans le forum Lazarus
    Réponses: 5
    Dernier message: 23/02/2009, 17h45
  2. [HTML] lien hypertexte pour aller sur un signet
    Par angelevil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/04/2005, 01h34
  3. [FLASH MX] Liens hypertext pour naviguer dans ma page
    Par marie64dk dans le forum Flash
    Réponses: 13
    Dernier message: 10/08/2004, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo