[DOM php5] entités HTML

MoUeTtE
Invité n'ayant pas de compte PHPfrance

12 déc. 2006, 15:43

Bonjour tout le monde,
Je suis en train de coder mon moteur de template (pas très original tout ca...) basé sur du XML. Jusque là ca marche. Seulement, dans les pages que j'utilise pour tester toutes les fonctionnalités, il y a des (x)HTML entities (genre & nbsp; ) et le parseur DOM de PHP5 est facilement vexé.
Pas de problème me direz vous : plutôt que loadXML, utilise loadHTMLFile, et tout se passera bien !

En fait le problème est que j'ai aussi définit un espace de nom pour certaines de mes balises (avec le schéma valide correspondant et tout et tout, oui monsieur ) donc je ne peux plus charger en HTML !

J'ai trouvé deux solutions, mais aucune ne me convient :

* Ne pas mettre d'entités (je vous explique pourquoi ca ne me va pas ? :wink: )
* mettre le membre resolveExternals à true (et donc charger le DTD à partir du site du W3C)


Le second cas fait bien que tout marche, mais le temps de chargement d'une simple page HTML prend entre 5 et 20 secondes...
un hack est proposé ici mais il suppose que l'on ait la main sur le serveur !
je me suis déjà passé d'un parseur SAX car il n'était pas dans l'installe de base, alors mettre des fichiers dans /etc/xml/, j'aimerai éviter, et puis ca ralentit toujours...

la solution d'ajouter les entités à tous mes fichiers XML, pourquoi pas, mais je vais devoir créer un générateur plus rapidement que prévu, parce que j'ai déjà 2 schémas XML dans la balise racine, alors ca va vite faire 20 lignes sur chaque page... et puis si mon template est composé de 10 fichiers, ca risque de ralentir le moteur... L'idéal serait de définir ces entités à la création de mon objet DomDocument mais je n'ai pas trouvé comment faire...

Quelqu'un a une solution ?
...
une bonne idée ?
...
une idée ?
...
10 balles ? :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 déc. 2006, 15:58

Sans aller jusqu'a te donner 10 balles, je peut te proposer une piste de reflexion ;)

Encadre le contenu de tes balises XML qui contiennent du HTML avec la balise suivante :

Code : Tout sélectionner

<![CDATA[code HTML]]>
Un truc du genre

Code : Tout sélectionner

<![CDATA[Ceci est un <strong>bout</strong> de <em>code HTML</em>]]>
Intégré dans du code XML

Code : Tout sélectionner

<ma_racine> <balise_1>toto</balise1> <balise2><![CDATA[Ceci est un <strong>bout</strong> de <em>code HTML</em>]]></balise2> </ma_racine>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

MoUeTtE
Invité n'ayant pas de compte PHPfrance

12 déc. 2006, 16:20

Déjà merci pour ta réponse (ultra) rapide !

Ca pourrait effectivement être une idée, mais je voudrais pouvoir faire des choses comme suit (mon moteur s'appelle GLOP engine)

<div>
<GLOP:value name="coucou" />
</div>

donc en mettant le HTML dans des CDATA, je n'aurai plus accès à ma balise GLOP:value, ce qui limite assez rapidement le système...

je viens de trouver une alternative temporaire : je rentre les codes iso des entités (je les prends sur http://www.commentcamarche.net/html/htmlcarac.php3 ) et comme l'espace était mon gros problème (balises vides formatées en CSS) ca marche.

ce n'est bien sur que temporaire, et je reste ouvert à toute suggestion !

merci encore !