j'ai installé wammpserver pour tester les nouvelles fonctionnalités de php5 et notamment l'utilisation de l'API dom. Mon programme qui suit lit un fichier source xml et récupère certaines valeurs des éléments pour les recopier dans un fichier nouveau xml. Au début j'ai eu des rpoblèmes de codage de caractère que j'ai résolu en spécifiant dans le fichier xml de destination l'encodage ISO-8859-1 (tel qu'à l'origine). Je souhaiterais créer dynamiquement une image qui récupère une chaîne string d'un fichier xml. Maheureusement je me retrouve encore avec des carctères mal interprétés!
Je précise que le script php5 est lancé en ligne de commande via un .bat (php.exe -q script.php). J'a tout essayé, notamment la fonction mb_convert_encoding, iconv, etc ... et les caractères accentués apparaissent avec un autre symbole. y-a-t-il quelque chose à spécifier dans le fichier php.ini. si oui, lequel faut-il modifier? celui du répertoire apache? ou du répertoire php dans wamp? bref, si vous avez été confronté à ce genre de problème je suis preneur de toute solution.
// creation document xml avec dom $dom = new DOMDocument(); $domsave = new DOMDocument('1.0', 'ISO-8859-1'); //ajout balise $smil=$domsave->createElement('smil'); $domsave->appendChild($smil); // chargment document source xml $dom->load("macro.xml"
//lecture document source et recuperation valeurs //sauvegardees dans fichier destination xml $slides = $dom->getElementsByTagName('slide'); $cumultime = 0; foreach($slides as $slide) { $titre = '' ; $image = '' ; $time = 0 ;
foreach($slide->childNodes as $child) { if ($child->nodeType != XML_ELEMENT_NODE) continue ; if ($child->tagName == 'titre_slide'){ $titre = $child->firstChild->nodeValue ; $titresave = $domsave->createElement('titre_slide_save'); $smil->appendChild($titresave); $contenu = $domsave->createTextNode($titre); $titresave->appendChild($contenu); } if($child->tagName == 'nom_fichier_img') $image = $child->firstChild->nodeValue ; if($child->tagName == 'Duree') $time = $child->firstChild->nodeValue ; $cumultime = $cumultime + $time; } echo "fichier : $image"; echo " titre : $titre"; echo "durée : $time"; echo "total: $cumultime"; } //sauvegarde fichier destination $domsave->save('titre.xml'); // recuperation dernier titre du source xml // encodage en utf-8 $titre_utf = mb_convert_encoding($titre,'ISO-8859-1','UTF-8'); //insertion titre dans image imagestring($imagetitre,$id_font,0,1,$titre,$noir); //sauvegarde en jpeg imagejpeg($imagetitre,'test.jpg',100); imagedestroy($imagetitre); ?>
ok, je vais chercher. Il ne doit pas y avoir beaucoup de développeurs qui utilisent le mode ligne de commande. Mais c'est pour remplacer une usine à gaz développée en visual basic ...
Bonsoir, je pensais que cela viendrait de la police que je charge lorsque je créé l'image. Mais en testant plusieurs polices, le problème persiste. je rappelle que je récupère d'unfichier xml à partir de DOM une chaîne de caractère que j'insère dans une image via la fonction imagestring( ). Ce fichier xml est en ISO-8859-1. lorsque j'écrit la chaîne récupérée dans un nouveau fichier xml avec pour encodage ISO-8859-1, je récupère bien les accents. Par contre, lorsque je redirige cette chaîne dans une image ou tout bêtement un fichier texte, les accents ne sont pas interprétés.
Bonjour juste pour vous signaler que je m'en suis sorti en utilisant la fonction imagettftext( ) à la place de la fonction imagestring( ). Les caractères sont récupérés correctement. Y-aurait-il un bug sur la fonction imagestring( )?