Erreur d'écriture d'URL, caractères spéciaux.

Fermé
HollyDeadCow - 9 févr. 2010 à 02:04
HollyDeadCow Messages postés 3 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 9 février 2010 - 9 févr. 2010 à 16:53
Bonjour,

Navré de venir poser une question sans doute de débutant. En même temps, je le suis absolument.

Je souhaite pouvoir lister les fichier d'un répertoire sous forme de liens sur une page quelconque. J'ai pu utiliser pour cela l'excellent script en PHP de gryzzly, et tout fonctionne de ce côté. Ma page liste parfaitement les liens qui correspondent aux fichiers contenus dans le répertoire.

Seulement, quand je les clique, certain d'entre eux me conduisent à une page d'erreur avec ce type de commentaires :

"Not Found

The requested URL /textes_traduits//Commentaire sur le Mahamoudra Upadesha - traduction française.doc was not found on this server.
"

Je me doute bien qu'il y a un soucis au niveau de la retranscription des noms de fichiers. Le problème dans ce cas de figure, c'est que les noms de ces fichiers comportent pour beaucoup des caractère spéciaux.

Existe-t-il un moyen, sans modifier le nom des fichiers existants, d'obtenir une écriture fonctionnelle des url correspondantes, tout en gardant le côté automatisé de la chose, parce que je je risque d'en avoir (vraiment) beaucoup à mettre en ligne.

Pour rappelle, le script de gryzzly, que j'ai utilisé sans soucis :

<?php
$dir_nom = './textes_traduits/'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers

while($element = readdir($dir)) {
	if($element != '.' && $element != '..') {
		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
		else {$dossier[] = $element;}
	}
}

closedir($dir);

if(!empty($dossier)) {
	sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
	echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
	echo "\t\t<ul>\n";
		foreach($dossier as $lien){
			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>";
}

if(!empty($fichier)){
	sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
	echo "Liste des fichiers/documents accessibles dans '$dir_nom' : \n\n";
	echo "\t\t<ul>\n";
		foreach($fichier as $lien) {
			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>";
 }
?>


En vous remerciant, tous, d'avance pour votre patience, j'ai vraiment fouillé au maximum, mais hélas mes failles en PHP (entre autre) tiennent vraiment du gouffre insondable.

8 réponses

zcrew Messages postés 231 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 26 février 2010 25
9 févr. 2010 à 16:14
echo '\t\t\t<li><a href="'.urlencode($dir_nom).'/'.urlencode($lien).'">'.$lien.'</a></li>';

je fais tout de travers aujourd'hui... un problème avec les double quotes

1
zcrew Messages postés 231 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 26 février 2010 25
9 févr. 2010 à 16:48
"\t" ça te donne une tabulation, '\t' ça t'inscrit antislash-t

c'est pareil avec "\n" que j'ai subtilement effacé de la ligne : le code généré est plus espacé, mais ça prend des ko à charger ;-)
1
zcrew Messages postés 231 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 26 février 2010 25
9 févr. 2010 à 14:40
Essaie de remplacer les 2 lignes
echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";

par
echo "\t\t\t<li><a href=\".urlencode($dir_nom)."/".urlencode($lien).">".$lien."</a></li>\n";
0
zcrew Messages postés 231 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 26 février 2010 25
9 févr. 2010 à 14:41
Mais le plus propre reste de ne plus utiliser de caractères spéciaux dans tes noms de fichier ;-)

0
Un grand merci à toi, zcrew!

Je vais essayer ce petit bout de code, je vous tiens au courant.

Je sais bien que l'idéal serait que nom des fichier soit débarrassé des caractère spéciaux, mais le propriétaire du site y tien vraiment... Je n'ai pas encore réussi à le convaincre d'en modifier une grande partie. :/

En attendant, je fais le test!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Malheureusement, zcrew, malgré ton effort, cela ne fonctionne pas non plus, j'obtiens sur la page le message suivant :

Parse error: syntax error, unexpected '<' in /homez.51/sevendus/sanghaforum.com/listing_textes.php on line 31

Évidement mes maigres connaissances ne me permettent pas de déceler ou se situe l'erreur de syntaxe.

Une autre idée?
0
HollyDeadCow Messages postés 3 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 9 février 2010
9 févr. 2010 à 16:16
Whaou, ça c'est du rapide!!! Je teste!
0
HollyDeadCow Messages postés 3 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 9 février 2010
9 févr. 2010 à 16:43
Alors... J'ai un tout petit peu modifié la ligne de code que tu m'as fournie :

Echo '\t\t\t<li><a href="'.urlencode($dir_nom).'/'.urlencode($lien).'">'.$lien.'</a></li>'; 


Qui est devenue :

Echo '\t\t\t<li><a href="'.urlencode($dir_nom).'/'.rawurlencode($lien).'">'.$lien.'</a></li>';


Si non, j'obtenais des signes "+" à la place des espaces dans les URL .

J'ai du aussi remplacer :

$dir_nom = './textes_traduits/'


Par :

$dir_nom = 'textes_traduits';


Et sur la finalité, cela marche à merveille!!!

Il me reste à comprendre l'usage des "\t\t\t...", parce qu'il s'affiche dans ma page.

Je pense bientôt mettre en résolu.
0
HollyDeadCow Messages postés 3 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 9 février 2010
9 févr. 2010 à 16:53
Oki, j'ai compris!

Encore un grand merci, grâce à toi j'ai appris des trucs aujourd'hui, !

À bientôt! :) (enfin, pas trop non plus, j'espère... :/ )
0