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

Bibliothèques et frameworks PHP Discussion :

[DOM] DOMDocument/DOMElement : balise auto-fermante, javascript


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut [DOM] DOMDocument/DOMElement : balise auto-fermante, javascript
    Bonjour,

    Je suis en train de me mettre à l'api DOMDocument pour générer un document au format Html.

    J'ai rencontre des difficultés lorsque je veux ajouter du code javascript :
    • soit mon document n'est plus conforme au W3C
    • soit le javascript n'est pas interprété


    Je m'explique :

    1. Si j'utilise DOMDocument::getHtml(), mon code javascript est bien interprété par le navigateur mais mes balises meta (par exemple) ne sont pas "autofermées" ce qui pose le problème des certifications W3C.
      Exemple de résultat avec DOMDocument::getHtml() :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
      <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <meta http-equiv="Content-Language" content="en-en">
      <title>Mon appli</title>
      <script type="text/javascript">
      	var toto = "pouet1";
      	var tata = "pouet2";
      </script>
      </head>
      <body></body></html>
      >> Est-ce que c'est possible d'indiquer qu'un element doit être auto-fermé ?


    2. Lorsque j'utilise DOMDocument::getXml(), là dans ce cas c'est bon pour les balises auto-fermantes : il détecte bien qu'il n'y pas de contenu dans la balise "meta" (par exemple) est la ferme comme un grand. Par contre il me converti tout les retours à la ligne et caractères spéciaux faisant que mon code javascript n'est plus interprété.
      Exemple de résultat avec DOMDocument::getXml() (j'espère que vous voyez les code ascii des retours chariots) :
      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
      <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
      <?xml version="1.0" encoding="UTF-8"?>
      <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <meta http-equiv="Content-Language" content="en-en"/>
      <title>Mon appli</title>
      <script type="text/javascript">;
      	var toto = "pouet1";
       
      	var tata = "pouet2";
       
       
       
      </script>
      </head>
      <body/>
      </html>
      >> Est-ce qu'il est possible d'indiquer que le contenu d'un élément ne doit pas être converti ?
      Pour info, j'ai essayer d'ajouter dans mon noeud script : // <![CDATA[ ....script.....//]]> voir même <!-- //-->, problème : les caractères spéciaux sont convertis.



    Certains d'entre vous vont certainement me proposer de mettre mon code javascript dans un fichier externe et de l'inclure au quel cas mon doc sera conforme et mon javascript bien interprété. Seulement, ca ne m'intéresse pas puisque le code javascript à ajouter est dynamique et je ne veux pas générer de fichiers Js dynamiques à la volée.

    D'autres vont peut-être me proposer de mettre mon code javascript sur une seule ligne. Problème : le code javascript que j'insère dynamiquement déclare des objets de type Dojo, Dijit et ca plante si ce n'est pas en multi-lignes.

    Voilà je pense avoir donné les éléments exprimant mon besoin.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 431
    Points : 15 803
    Points
    15 803
    Par défaut
    Citation Envoyé par fgallnii Voir le message
    Pour info, j'ai essayer d'ajouter dans mon noeud script : // <![CDATA[ ....script.....//]]> voir même <!-- //-->, problème : les caractères spéciaux sont convertis.
    ça serait une solution de mettre le code JavaScript dans des balises CDATA. donne nous plus de détails sur ce tu obtiens comme problème de caractères dans ce cas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Lorsque je mets des :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // <![CDATA[ ....script.....//]]>
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // &lt;![CDATA[
     ....script..... 
    //]]&gt;
    Voilà en espèrant que ca puisse aider...

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 431
    Points : 15 803
    Points
    15 803
    Par défaut
    est ce que tu utilise la méthode "create_cdata_section" ?
    regarde là :
    http://php.net/domdocument_create_cdata_section

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    C'est vrai que je n'ajoute pas mes CDATA de la bonne manière puisque je les ajouter sous forme d'une string au sein d'un noeud...

    Pour info, l'api DOM n'est pas très à jour puisque create_cdata_section n'est pas reconnu, c'est createCDATASection qu'il faut utiliser.

    Ceci étant je viens de tester avec la bonne manière, c'est à dire avec DomDocument->createCDATASection($codeJavascript) et du coups les caractères spéciaux ne sont plus convertis mais mon code javascript n'est pas interprété par le navigateur donc snifff...

    Autre idée ??
    (Je pense pas me reconnecter avant demain soir... eh oui je relache un peu le week end...)

Discussions similaires

  1. xml et balise auto-fermante
    Par zozizozu dans le forum Général Python
    Réponses: 1
    Dernier message: 31/08/2010, 17h52
  2. fichiers XML avec des balises auto-fermantes
    Par processeur dans le forum Général Python
    Réponses: 0
    Dernier message: 15/08/2009, 20h14
  3. [XML] Les balises auto-fermantes dans XML
    Par yjrunning dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/06/2009, 12h06
  4. [DOM] balise auto fermante
    Par ymerdy dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 04/11/2007, 23h53
  5. [Configuration] Balise auto fermante
    Par bourbaki2003 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 20/05/2006, 12h14

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