Problème d'accent dans un lien html

Invité
Invité n'ayant pas de compte PHPfrance

27 sept. 2006, 16:50

Bonjour,

J'ai un script php qui parcours un répertoire pour en lister les fichiers avec sur le nom du fichier un lien qui permet de le télécharger (= pour fair une bibliothèque).

Mon nom de fichier est "Information générale.pdf" mon lien est donc du style :

Code : Tout sélectionner

<a href="telechargement/bibliotheque/Information générale.pdf" target="_blank">Information générale</a>
Dans ce cas la le lien ne marche pas à cause des espaces, accents, ...
Pour les espaces j'arrive à gérer et pour les accents j'ai essayé la fonction htmlentities() qui me retourne un lien du style:

Code : Tout sélectionner

<a href="telechargement/bibliotheque/Information_g&eacute;n&eacute;rale.pdf" target="_blank">Information générale</a>
Et la le lien ne fonctionne toujours pas...
Après vérification quand je parcours mon répertoire (localhost/telechargement/ ... ) à partir de mon navigateur j'ai dans la barre d'adresse :

Code : Tout sélectionner

telechargement/bibliotheque/Information_g%c3%a9n%c3%a9rale.pdf
Y-a-t-il une fonction qui permet de gérer les caractères spéciaux pour que le lien marche ... qui remplace un "é" par "%c3%a9" ???

Merci d'avance

Eléphant du PHP | 332 Messages

27 sept. 2006, 18:12

J'ai eu le même problème il y a quelques mois. Après avoir regardé les fonctions url_encode, utf8_encode et autres dans le même style, et après n'être arrivé à rien (mais je ne suis probablement pas doué), j'ai adopté une autre tactique : supprimer les accents, les espaces et tous les caractères à problèmes (apostrophes, &, ...) dans les noms de fichiers !

Après l'upload, j'applique cette fonction au nom du document original :
function normalize_file_name ($filename) {
	$accentue = array('à','ç','é','è','ê','ë','ï','î','ö','ô','ù',
	'À','Ç','É','È','Ê','Ë','Ï','Î','Ö','Ô','Ù',
	'#','$','?','&',' ', '"', "'");
	$normal   = array('a','c','e','e','e','e','i','i','o','o','u',
	'A','C','E','E','E','E','I','I','O','O','U',
	'-','S','_','_et_','_', '_', '_');
	return str_replace ($accentue, $normal, $filename);
}

Invité
Invité n'ayant pas de compte PHPfrance

28 sept. 2006, 10:56

Merci,

mais comme j'affiche le nom des répertoires et fichiers j'aurais bien aimé garder la syntaxe exacte ... ça fait plus propre

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 sept. 2006, 11:11

Je crains malheureusement que tu n'ais guerre le choix... En théorie les url acceptent les accents depuis 2001, mais en pratique il n'y a qu'au niveau des noms de domaine que cela est géré correctement..

D'une manière générale, à l'exception du point (.), du tiret (-) et de l'underscore (_), il faut absolument éviter tout caractères spéciaux dans les noms de fichier ou de dossier :)