IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Interaction "délicate" entre XSL et "$_GET" -> ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut Interaction "délicate" entre XSL et "$_GET" -> ?
    Bonjour,
    D'ordinaire, le php, je trouve cela plutôt "top" ! Et puis, le XML/XSL "Wouah !"
    Après, quand il s'agit d'agencer les 2 ensemble -> gloup ! Là, je me sens nettement moins à mon aise ! Voici donc l'objet de ma venue :
    C'est à propos de l'ensemble XML/XSL ci-dessous, que j'appelle via le code PHP (toujours ci-dessous)

    Si je lance le code php tel quel PHP2.php -> Super, ça fonctionne !
    Ca affiche bien les infos demandées concernant le 2ème auteur "éli" :
    Variable "auteur" : éli

    Début

    * One - A - B - C

    * Two - A2 - B2 - C2

    End
    Après, si je remplace la ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $auteur=$_GET['auteur'];
    et que je relance le tout via l'URI suivante:
    PHP2.php?auteur=éli
    Voilà ce qui s'affiche:
    Variable "auteur" : �li

    Début

    End
    Là, il ne trouve plus !
    -> Autrement dit, ça me donne l'impression d'une "incompatibilité" entre "$_GET" et les fonctions php XML suivantes, à propos de l'accentuation enregistrée de l'URL mais, certainement, il doit y avoir une explication plus "logique" !
    Qu'en pensez-vous, SVP ?


    Code php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
     
    // $auteur=$_GET['auteur'];
    $auteur='éli';
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?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="éli">
    				<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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?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>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu tapes ton lien directement ou il vient d'une page ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut
    (Cas n° I) Si j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $auteur=$_GET['auteur'];
    -> Si je tape mon url manuellement dans le navigateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://souffle56.ovh.org/Site/Tests/Injection_d_une_variable/PHP3.php?auteur=éli
    -> * Sous Firefox, elle se transforme aussitôt en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://souffle56.ovh.org/Site/Tests/Injection_d_une_variable/PHP3.php?auteur=%E9li
    * Sous IExplorer, l'url s'affiche correctement
    Mais sur ces 2 navigateurs, le contenu de la variable "$auteur" est altéré à l'affichage -> Il affiche (sous Firefox):
    Variable "auteur" : �li

    Début

    End
    et sous I Explorer :
    Variable "auteur" : �li
    Début

    End
    (Cas n° II) Si je clique sur un lien sur une page internet ->
    * Si ma variable "$auteur" est déterminée dans le fichier php lui-même (1er cas de figure précédemment évoqué, où ça fonctionne) -> Voilà le résultat
    * Si ma variable est choisie via l'url du fichier php (2ème cas de figure), voilà ce que ça donne (si tu cliques ici)

    Comment expliquer cet écart de comportement ?
    * Peux-tu faire les essais, de ton coté ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2008
    Messages : 227
    Par défaut
    Étant sous opéra, ça me donne le comportement suivant :

    si je tape éli dans la barre d'adresse, l'url se transforme automatiquement en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://souffle56.ovh.org/Site/Tests/Injection_d_une_variable/PHP3.php?auteur=%C3%A9li
    et j'obtiens "éli"

    Si je suis ton lien (le numéro 2) j'obtiens �li

    Sinon, pour la résolution de ton problème, utiliser les fonctions url(de|en)code ne serait-il pas la solution ??

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Est-ce que ton fichier php a bien un encodage UTF8 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut
    Oui sabotage,
    J'utilise l'éditeur "Notepad++" -> j'avais bien pensé à ce genre d'affaire là
    -> j'ai vérifié, je suis bien en utf-8 (sans BOM)
    -> Sinon, coté tests, as-tu les mêmes résultats, de ton coté ?

    Sinon, patouche, c'est vrai que si je trouve pas d'autre alternative, "decode" reste une possibilité très intéressante; d'autant plus que ça m'amènerait à envisager toutes mes requêtes xml sans plus avoir à me soucier de savoir si la personne qui fait la requête a bien mis la bonne accentuation ou pas
    (-> soucis de moins pour moi... et pour elle !)
    -> Je crois que je vais opter pour cette solution là !
    * A ce propos, tu pensais à "utf8_decode" ou... ?

    Du coup, il faut que je trouve un moyen, "fastoche" si possible (fonction php...), qui me permette de récupérer tout un fichier xml et d'en supprimer toute accentuation également... pour que ça coincide ! Une idée ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut Parsage XML/XSL via PHP: problème d'accentuation
    Re-Bonjour,

    Je me décide (enfin) à reprendre toutes les données précédentes, pour les synthétiser et les rendre plus explicites !
    Voilà les données :
    J'ai 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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?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é:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?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>

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut
    Hello !

    Mieux vaut tard que jamais... Ca y est, j'ai enfin trouvé le moyen d'assurer la jonction entre la partie "Récupération de l'Url" et "exécution d'une requête php/xml/xsl" (sans perturbation liée à l'accentuation)

    En fait il fallait "juste" adapter le contenu de la requête php au format utf-8 que j'utilise pour la partie xml/xsl -> D'où la fonction php "encode()" utilisée ici !
    -> Voici ci dessous le code php (Si il y en a que ça intéresse) et l'url utilisée pour la requête :
    Code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
    $auteur=$_GET['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', utf8_encode($auteur));
    echo $proc->transformToXML($xml);
     
    ?>
    Bonne continuation à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Des variables entre XSL et PHP
    Par mabedan dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/08/2007, 16h17
  2. Difference entre XSL et XSLT
    Par Spyco dans le forum XMLRAD
    Réponses: 4
    Dernier message: 02/09/2004, 16h55
  3. La difference entre XSL et XSLT?
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/06/2003, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo