Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > Artichow
Artichow Forum d'entraide pour la bibliothèque Artichow permettant de manipuler des images en PHP.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/07/2007, 13h11   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 18
Points : 4
Points : 4
Par défaut [Artichow] Problème au niveau des caractères accentués des légendes

Bonjour. Je créer un graphique a partir de données récupérer d'un fichier texte contenant le nombre de messages reçu sur le serveur snmp du labo ou je suis actuellement.
J'affiche ensuite le camembert de statistiques représentant les différentes catégories de messages reçus comme par exemple s'il s'agit d'un spasm ou d'un e-mail pour une personne particulière.
Mon problème consiste dans l'affichage de la légende.
J'utilise donc la librairie graphique artichow. J'aurais voulu savoir comment il serait possible de faire en sorte a ce que les accents soit bien représentés dans la légende de mon graphique. Car ils sont tous remplacés par des caractères bizarre.
Si quelqu'un a une idée je suis preneur
Merci.
tiantian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 14h20   #2
Membre à l'essai
 
Inscription : juillet 2007
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 38
Points : 24
Points : 24
Vérifie si il n'y a pas d'incohérence de charset entre ton document de départ et ta page web.
FredPont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 14h20   #3
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
il faut utiliser utf8_encode() quand tu passes des chaines de caractères à Artichow pour qu'il les affiche correctement.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 14h37   #4
Invité de passage
 
Inscription : juillet 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 18
Points : 4
Points : 4
J'ai essayé avec cette methode mais je ne y arrive pas.
Car moi je passe un tableau. Donc j'ai essayé de parcourir le tableau avec une boucle foreach ($mon_tableau as $ligne).
Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
<html>
<head>
<title></title>
</head><body>
<pre>
<?
$tableau = file('/var/www/28-06-07.txt'); 
$affichage=0;
 
$codeErreur=array();
echo "1ere partie du stage ==> Remplissage du tableau\n\n";
foreach($tableau as $ligne)
{
	if($ligne=="Détail des transferts :\n")
	{
		$affichage=1;
		continue;
	}
        elseif(stristr($ligne,'Nombre de processus minimum occupés :'))
        {
		$affichage=0;
        }
	elseif($ligne=="Statistiques depuis le démarrage de la passerelle :\n"          
               or $ligne=="---------------------------------------------------\n")
	{
		$affichage=0;
	}
	if($affichage==1)
	{
		//echo "<br>$ligne";
		list($cle,$tmp)=explode(": ",$ligne);
		list($valeur)=explode(" (",$tmp);
                $codeErreur["$cle"]=$valeur;
 
	}
}
print_r($codeErreur);
echo "</pre>\n";
$serErreur=rawurlencode(serialize($codeErreur));
echo "<a href='ex.php?codeErreur=$serErreur'>Lien</a>";
?>
</body>
</html>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
require_once "/Artichow/Pie.class.php";
$graph = new Graph(650, 525);
$graph->title->set("Stats");
$graph->title->setFont(new TuffyItalic(16));
 
$array = unserialize(stripslashes($_GET['codeErreur']));
//j'essaie de faire une boucle foreach ici avec utf8_encode() mais cela ne marche pa
$plot = new Pie($array, Pie::EARTH);
$plot->setCenter(0.22, 0.27);
$plot->setSize(0.4, 0.35);
$plot->set3D(10);
 
$plot->legend->setPosition(2.4,1.7);
 
$graph->add($plot);
$graph->draw();
 
?>
Serait il possible de m'expliquer un peu plus comment procéder pour changer l'encodage de toutes les lignes de mon tableau. Merci
tiantian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 14h45   #5
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Essaie de remplacer
Code :
$codeErreur["$cle"]=$valeur;
par
Code :
$codeErreur["$cle"]=utf8_encode($valeur);
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 14h54   #6
Invité de passage
 
Inscription : juillet 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 18
Points : 4
Points : 4
Ca ne marche pas. Car moi c'est la clé qu'il faut changer et non pas la valeur.
N'y a t'il pas possibilité d'utiliser la fonction iconv() ?
Je sais qu'elle doit être placée après mon unserialize(...).
Mais je ne vois pas comment l'utiliser. J'ai essayé avec une boucle pour modifier chaque ligne mais cela ne change rien.
tiantian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 15h05   #7
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Rien ne t'empeche d'utiliser utf8_encode() sur la clé
Code :
$codeErreur[utf8_encode($cle)]=utf8_encode($valeur);
iconv s'utilise comme ca:
Code :
$machaineModif=iconv("ISO-8859-1","UTF-8",$machaine);
donc pour un tableau
Code :
1
2
3
4
for($i=0;$i<count($tab);$i++)
{
$tab[$i] = iconv("ISO-8859-1","UTF-8",$tab[$i]);
}
Mais je ne vois pas trop à froid comment changer la valeur de la clé sauf a reconstruire un autre tableau :
Code :
1
2
3
4
foreach($tab as $key=>$val)
{
$newtab[iconv("ISO-8859-1","UTF-8",$key)] = iconv("ISO-8859-1","UTF-8",$value);
}
ce qui revient a faire l'encodage du début de mon message.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 15h41   #8
Invité de passage
 
Inscription : juillet 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 18
Points : 4
Points : 4
J'ai essayé avec les 2 méthodes mais ca ne change toujours rien.
Mais est ce qu'il faut bien placé ces boucles après le unserialize au moins?
Pourtant mon maître avec qui j'ai parlé de ca ma dit que c'était bien au bon endroit.
Je dois forcement m'y prendre mal.
tiantian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 16h18   #9
Invité de passage
 
Inscription : juillet 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 18
Points : 4
Points : 4
Ca y est.
J'ai enfin trouvé la solution.
Je joins donc mes deux codes.

Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
//1ere partie
<html>
<head>
<title>Remplissage tableau</title>
</head>
<body>
<pre>
<?
$tableau = file('/var/www/28-06-07.txt');   //on choisi le fichier a ouvrir pour phase de test 
$affichage=0;    //on initialise la variable de travail a 0
 
$codeErreur=array(); //ici on créer une variable de type tableau
foreach($tableau as $ligne)      //boucle permettant de parcourir le tableau
				 //ligne par ligne
{
	if($ligne=="Détail des transferts :\n")   //début du tri
	{
		$affichage=1;      //si on a bien la ligne on autorise                                               l'affichage
		continue;	   //ne prend pas en compte la première ligne
	}
        elseif(stristr($ligne,'Nombre de processus minimum occupés :'))
        {
		$affichage=0;	   //si on a cette ligne, l'affichage n'est pas                                       autorisé
        }
	elseif($ligne=="Statistiques depuis le démarrage de la passerelle :\n"             or $ligne=="---------------------------------------------------\n")
	{
		$affichage=0;      //affichage non autorisé ici également
	}
	if($affichage==1)          //une fois le tri terminé
	{
		list($cle,$tmp)=explode(": ",$ligne);   
		//explosion de la chaine de caractere pout supprimer ce qui ne                    nous interesse pas. Ici on agit sur les clés du tableau qu'ont                  stockent ensuite dans une variable temporaire
                list($valeur)=explode(" (",$tmp);
		//nouvelle explosion mais cette fois on agit sur les valeurs du 		  tableau afin de ne garder que le chiffre 
                $codeErreur["$cle"]=$valeur;  
		//enfin on remplit un nouveau avec seulement les données qui                      nous interessent.
	}
}
print_r($codeErreur);
echo "</pre>\n";
$serErreur=(rawurlencode(serialize($codeErreur)));  
//ici on encode une chaîne (le tableau en tant que chaîne de caractères plus     précisement) en URL qu'on serialize afin de la sauvegarder afin de pouvoir la   passer en paramètre lors de l'appel du second fichier.
echo "<a href='ex.php?codeErreur=$serErreur'>Lien</a>";
?>
</pre>
</body>
</html>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
require_once('/var/www/Artichow/Pie.class.php');
$graph = new Graph(650, 525);
$graph->title->set("Stats");
$graph->title->setFont(new TuffyItalic(16));
 
$array = unserialize(stripslashes($_GET['codeErreur']));
foreach($array as $key => $value)  
{
	$array2[iconv("UTF-8","ISO-8859-1",$key)] = $value;
        //on créer un nouveau tableau avec chaque clé converti avec le bon               encodage 
}
 
$plot = new Pie($array2, Pie::EARTH);
$plot->setCenter(0.22, 0.27);
$plot->setSize(0.4, 0.35);
$plot->set3D(10);
$plot->legend->setPosition(2.4,1.7);
 
$graph->add($plot);
$graph->draw();
?>
tiantian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h26.


 
 
 
 
Partenaires

Hébergement Web