|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() |
Salut à tous,
J'ai un petit soucis. Dans le cadre d'une gallerie Photo/Vidéo que je suis en train de coder, je propose de déposer ses dossiers directement par FTP et ensuite la gallerie s'occupe de tout (création des miniatures, conversion des videos en FLV ...) ... Le pb, c'est que je peux avoir des répertoires avec des caractères spéciaux genre "Ski au Val d'allos" qui comprend ici le ' ... Il me dit alors qu'il n'arrive pas à ouvrir le dossier car il n'existe pas ... Pour les caractères accentués, j'ai utilisé la fonction urlencode() et urldecode() et cela fonctionne mais pas pour le ' ... Quand je passe en ligne de commande sur mon dédié, je vois que pour entre dans ce dossier, il protège les caractères mais je ne trouve pas de fonctions PHP me permettant cela ... Connaissez-vous une solution pour pouvoir utiliser ces noms de dossiers spéciaux ? Merci d'avance |
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() Inscription : août 2005 Messages : 515 ![]() |
Bonjour,
quand vous parlez de protéger le caractère < ' > vous parlez de < \' > et du caractère d'échappement < \ >? Du reste, pour urlencode : Code :
Cordialement, DaRiaN. |
||
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() |
Ici, le système de fichiers Unix n'est pas celui de Windows. Il n'accèpte pas les espaces et les caractères accentués pour les noms de fichiers et dossiers. Perso, j'ai réalisé une petite fonction qui va remplacer les accents par des lettres sans accents (minuscules et majuscules), va également remplacer les lettres particulières comme œ par les 2 caractères oe, puis va remplacer tous les autres caractères spéciaux par un souligné (_). Ce qui donnerait dans ton exemple : Ski_au_Val_d_allos
Voir du côté de la fonction strtr... |
|
|
00
|
|
|
#4 | |||
|
Invité régulier
![]() |
Citation:
Merci de la réponse. Exemple simple, j'ai un repertoire "2003-12-21__Ski au Val d'Allos". Je clique sur un lien qui me passe le repertoire en paramètre de l'URL genre : Code :
index.php?action=lister&folder=Photos%2F2003%2F2003-12-21__Ski+au+Val+d%27Allos%2F Code :
Warning: opendir(Photos/2003/2003-12-21__Ski au Val d\'Allos/) [function.opendir]: failed to open dir: No such file or directory |
|||
|
|
00
|
|
|
#5 | |
|
Invité régulier
![]() |
Citation:
Le truc, c'est que ce repertoire existe bien, il est pris en compte par Linux ... Et si je me met en ligne de commande, je peux y accèder en tappant : Code :
cd 2003-12-21__Ski\ au\ Val\ d\'Allos/ Sinon, serait-il possible de me montrer la tienne ? Merci d'avance |
|
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() |
Citation:
|
|
|
|
00
|
|
|
#7 | |
|
Invité régulier
![]() |
Citation:
Code :
Warning: opendir(Photos/2003/2003-12-21__Ski au Val d\'Allos/) |
|
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() |
Ok.
A la réception de ta chaine, Il faut (si nécessaire) enlever les antislaches de protection, sinon, tu risques de les doubler... Utilises la fonction StripSlashes(); Mais en fait, je te conseillerais plutôt d'utiliser urlencode() si la chaîne passe par GET , puis urldecode() pour la réceptionner : $chaine=urldecode(@$_GET['folder']); Essaye aussi d'ajouter des guillemets avec opendir : $chaine='"'.$chaine.'"'; Si rien ne fonctionne, montre-nous ce que tu obtiens comme chaine avec ces fonctions. |
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() |
C'est justement ce que je fais, mais je crois que cela ne fonctionne que pour les caractères accentés et autres ...
Voici les étapes de mon process : 1 ) Je passe mon URL dans un lien avec urlencode() : Code :
$_strLink = '?action=lister&folder='.urlencode($myFolder); Code :
index.php?action=lister&folder=2003-12-21__Ski+au+Val+d'Allos Code :
index.php?action=lister&folder=Photos%2F2003%2F2003-12-21__Ski+au+Val+d%27Allos%2F En brut (sans encore éxécuter urldecode()), je récupère avec $_GET['folder] : Code :
Photos/2003/2003-12-21__Ski au Val d\'Allos/ Code :
Photos/2003/2003-12-21__Ski au Val d\'Allos/ Et j'ai bien sur mon erreur OpenDir() ... |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() |
C'est bon, j'ai la solution :
Il faut que je fasse : Code :
$rep = stripslashes(urldecode($_GET['folder])); Par contre, du coup, a quoi me sert le urldecode puisque les URL semblaient etres les mêmes (voir mon post au dessus) ? Merci. |
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() |
Les caractères spéciaux / accentués ne sont pas supportés dans les url... Les fonctions UrlEncode() et UrlDecode() permettent de résoudre (en partie) ce problème. Pour ma part, je préfère utiliser mes propres fonctions d'encodage : StrToHexStr() et HexStrToStr() -> Les chaînes étant complètement codées avec la valeur ASCII des caractères, je n'ai pas besoin de les traiter avec AddSlashes() et StripSlaches(). D'ailleurs si tu es intérressé pour les essayer, dis le moi, que je poste le code.
|
|
|
00
|
|
|
#12 |
|
Invité régulier
![]() |
Sub0,
J'allais justement te demander si cela ne te dérangerait de poster tes méthodes ![]() Je suis intéressé en effet, cela résoudrait pas mal de soucis, je n'y aurais pas pensé. Merci d'avance |
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé
![]() |
Code :
|
||
|
|
00
|
|
|
#14 |
|
Invité régulier
![]() |
Merci bien Sub0.
Je vais tester ça. @++ et merci encore |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com