Variable accentuées, url ... utf-8 ET listing de DOSSIERS

arginine Messages postés 10 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 avril 2010 - 17 avril 2010 à 17:54
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 - 19 avril 2010 à 08:47
Bonjour tous,

Depuis 2 soirées je m'énerve violemment avec une "variable accentuée" passée dans une url. Toutes mes pages sont encodées en utf-8 (balise meta). Je m'explique (désolé c'est un chouille long, par avance merci de me lire):

Je suis en train de faire un petit script de gestion d'albums photos. L'architecture est la suivante:

dossier "toto et stéphane" : album d'images 1
dossier "tata": album d'images 2
dossier admin: fichier de gestions du (des) galeries d'images

Dossiers des albums photos ( ./nom du dossier/index.php)
Il y a lien vers "../admin/index.php" où est renseignée dans l'url le nom du dossier contenant l'album photos:

Voici comment je récupère le nom do dossier (dans tous les fichiers index.php des dossiers des albums photos):

TOUT SÉLECTIONNER
// Gallery dir name
$a = $_SERVER['PHP_SELF'];
$t = ereg_replace("/index.php", "", $a);
$dir = ereg_replace("/(.)*/","",$t);


Et voici le lien qui pointe vers le fichier index.php d'administration des albums photos
TOUT SÉLECTIONNER
[../admin/index.php?dir=<? echo urlencode($dir); ?> Admin]</td>


Fichier ../admin/index.php:
Au click sur le lien précédent ça me donne ça (pour l'album photos "toto et stéphane"): http://localhost:8888/phpmm_full/admin/ ... toto+et+stéphane

Alors voila mon problème:

Pour la suite des opérations, j'ai besoin de savoir quel album photos est "envoyé" (récupération de la variable $dir) au fichier ../admin/index.php, pour cela j'ai fait une fonction qui liste les noms des dossiers du répertoire ou sont enregistrés les albums photos:

TOUT SÉLECTIONNER
function scan_galls($dirgall)
{
$files = array();
$fh = opendir($dirgall);
while (false !($filename readdir($fh)) )
{
if ( $filename != "." and $filename != ".." and !is_file($filename) and $filename !== "admin" and !preg_match ("/^\./", $filename) )
{

array_push($files, $filename);}

}
closedir($fh);
natcasesort($files);
return $files;
}

$galls=scan_galls("..");


LE PROBLEME:

$a = $galls['1'];
echo $a
Ca affiche "toto et stéphane"

$b = stripslashes($dir);
echo $b
Ca affiche "toto et stéphane"

if ($a == $b) echo "victoire";

.... et pas de victoire ----> this is the problem

Voici ma configuration:
- Server apache/php (5.2.11)/mysql: NAMP (je suis sur Mac)
- Toutes mes pages sont encodées en utf-8 (balise META):
TOUT SÉLECTIONNER
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


Jj'ai essayé avec utf8_encode ou decode ... jamais je ne suis arrivé à victoire ...


l'un ou l'une d'entre vous aurait il une piste ?

Par avance merci et n'hésitez pas à me demandez d'autre détails si nécessaire

Par avance merci,

F

5 réponses

pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
18 avril 2010 à 14:20
Bonjour,

à tu essayé un petit trim()? Histoire d'enlever les éventuels espaces etc?

- Pysco68
0
arginine Messages postés 10 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 avril 2010
18 avril 2010 à 15:31
SAlut, merci pour ta reéponse
oui j'ai essayé un petit trim mais sans résultat
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
18 avril 2010 à 16:21
Petit essai;

fais voir:

echo preg_replace('/'.$a.'/u', "", $b);


Si jamais strlen() du pref_replace en haut, fait 0 c'est que les deux chaines sont identiques....

- Pysco68
0
arginine Messages postés 10 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 avril 2010
19 avril 2010 à 00:30
ah cool: le strlen sur les deux chaines est différent ...
bizarrement d'ailleurs .... mais au moins il y a une différence... inexplicable mais bon c'est deja ca.

$a (variable $dir envoyée via l'url) : 17
$b (varibale sorti du listing des repertoire, function scan_galls($dirgall) : 18

c'est quoi le /u du preg replace ?

et le strlen sur le preg_replace me donne pas zero mais 18

essayé aussi avec un trim sur les varaibles ... pareil

t'as une idée ?
0

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

Posez votre question
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
19 avril 2010 à 08:47
Bonjour, le /u étends la regex aux caractères UTF8/Unicode,

mon prochain conseil est; convertis la chaine en hexadécimal, pour pouvoir faire (à la main!) une comparaison!

Bonne chance ;)

Cordialement,
- Pysco68
0
Rejoignez-nous