Requête XML/XSL via PHP: problème d'accentuation

Petit nouveau ! | 2 Messages

04 juil. 2010, 20:21

Bonjour,
J'ai un problème, actuellement, avec un programme (code précisé ci-dessous) qui me permet:

(1) de récupérer une variable passée par url (via $_GET)
(2) d'afficher cette variable (pour vérifier que l'accentuation est bien reçue)
(3) d'intégrer cette variable à une base XML/XSL (pour afficher la partie du fichier XML correspondant à la variable précisée)

Si la variable rentrée n'a pas d'accentuation; par exemple:
-> Ca fonctionne -> Voilà ce qui s'affiche:
Variable "auteur" : Dess

Début

* Etes-vous heureux ? - Certainement ! - Assurément ! - Ca c'est sûr !

* Tout le temps ? - Euh ! - Ben ! - Ca dépend !

End
Par contre, si cette variable est accentuée; par exemple:
-> Voilà ce qui s'affiche:
Variable "auteur" : ?liane

Début

End
A noter que si je retire les parties (2) et (3) du programme, pour ne plus garder que:
<?php

$auteur=$_GET['auteur'];
echo 'Variable "auteur" : '.$auteur;

?>
Là, l'accentuation n'est pas altérée -> Ca s'affiche:
Variable "auteur" : éliane
Mais là, évidemment, mon programme n'a plus d'intérêt !

-> Là je ne vois que 2 solutions possibles, pour en sortir:

1 - Comprendre pourquoi le code php que j'utilise cause ce problème d'accentuation, pour y remédier
2 - Parser mon ensemble XML/XSL d'une autre façon (parseur en php ou... en javascript, si besoin)

-> Pour toute suggestion que vous pourriez avoir à ce propos, par avance un immense Merci ! :)

***********************
Code PHP utilisé:
<?php

$auteur=$_GET['auteur'];
echo 'Variable "auteur" : '.$auteur;

$xsl = new DOMDocument;
$xsl->load('XSL.xsl');

$xml = new DOMDocument;
$xml->load('XML.xml');

// Configure le transformateur
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);

$proc->setParameter(null, 'auteur_choisi', $auteur);
echo $proc->transformToXML($xml);

?>
Code XML utilisé:

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <enregistrements> <audios> <enseignements> <auteur nom="Dess"> <album titre="Un sens à sa vie !"> <largeur>462</largeur> <regroupement sous_titre="Etes-vous heureux ?"> <ligne>Certainement !</ligne> <ligne>Assurément !</ligne> <ligne>Ca c'est sûr !</ligne> </regroupement> <regroupement sous_titre="Tout le temps ?"> <ligne>Euh !</ligne> <ligne>Ben !</ligne> <ligne>Ca dépend !</ligne> </regroupement> </album> </auteur> <auteur nom="éliane"> <album titre="Vive la vie !"> <largeur>500</largeur> <regroupement sous_titre="One"> <ligne>A</ligne> <ligne>B</ligne> <ligne>C</ligne> </regroupement> <regroupement sous_titre="Two"> <ligne>A2</ligne> <ligne>B2</ligne> <ligne>C2</ligne> </regroupement> </album> </auteur> </enseignements> </audios> </enregistrements>
Code XSL utilisé:

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Audio</title> </head> <body bgcolor="#FFFFFF"> <p>Début </p> <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[@nom=$auteur_choisi]/album[1]/regroupement" /> <p>End </p> </body> </html> </xsl:template> <xsl:template match="regroupement"> <p> <xsl:apply-templates select="@sous_titre"/> <xsl:apply-templates select="ligne"/> </p> </xsl:template> <xsl:template match="@sous_titre"> * <xsl:value-of select="."/> </xsl:template> <xsl:template match="ligne"> - <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet>

ViPHP
ViPHP | 3607 Messages

21 juil. 2010, 17:03

Bonjour,
Il faut vérifier les différents encodages des 3 fichiers, il faut qu'ils soient tous en UTF-8...
Ensuite tu peux essayer de rajouter en haut de ton script principal:
header('Content-type: text/html; charset=UTF-8');
(il faut peut-être changer le content-type)
Sinon essaye de faire un utf8_encode ou decode sur ta variable avant de la passer à xsl...

Petit nouveau ! | 2 Messages

29 juil. 2010, 01:42

Merci,
Effectivement, avec ça :

Code : Tout sélectionner

Sinon essaye de faire un utf8_encode ou decode sur ta variable avant de la passer à xsl...
Ca fonctionne impeccable !

Merci à toi...
Et bonne continuation ! :)

ViPHP
ViPHP | 3607 Messages

29 juil. 2010, 09:25

pas de soucis ;)