Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
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 01/02/2008, 11h28   #1
Invité régulier
 
Inscription : octobre 2006
Messages : 20
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2006
Messages : 20
Points : 9
Points : 9
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 :
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!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";&#13;
    	var tata = "pouet2";&#13;
    &#13;
    </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
fgallnii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 12h49   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 21h26   #3
Invité régulier
 
Inscription : octobre 2006
Messages : 20
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2006
Messages : 20
Points : 9
Points : 9
Lorsque je mets des :
Code :
// <![CDATA[ ....script.....//]]>
j'obtiens :
Code :
// &lt;![CDATA[&#13; ....script..... &#13;//]]&gt;
Voilà en espèrant que ca puisse aider...
fgallnii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 22h20   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
est ce que tu utilise la méthode "create_cdata_section" ?
regarde là :
http://php.net/domdocument_create_cdata_section
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2008, 12h14   #5
Invité régulier
 
Inscription : octobre 2006
Messages : 20
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2006
Messages : 20
Points : 9
Points : 9
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...)
fgallnii est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h33.


 
 
 
 
Partenaires

Hébergement Web