Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Jelix 1.1 et loadHTML

Posted by Arnall on 10/03/2008 11:49

Bonjour,

dans la nouvelle version 1.1 de Jelix au niveau de jForm on trouve un nouveau type pour les champs de saisie: html

Le champ est chargé côté serveur à l'aide de la méthode loadHTML de DOMDocument. Malheureusement la méthode ne contente pas de charger le champ il fait aussi des remarques sur le contenu. Je prend l'exemple d'un code vidéo Dailymotion :

voici le code fournit par Dailymotion :

 <div><object width="220" height="170">
 <param name="movie" value="http://www.dailymotion.com/swf/k7IMMMjtjc5ZRnKySZ&colors=special:3F1CE8;&related=0"></param>
 <param name="allowFullScreen" value="true"></param>
 <param name="allowScriptAccess" value="always"></param>
 <embed src="http://www.dailymotion.com/swf/k7IMMMjtjc5ZRnKySZ&colors=special:3F1CE8;&related=0" 
 type="application/x-shockwave-flash" width="220" height="170" allowFullScreen="true" 
 allowScriptAccess="always"></embed></object><br /><b>
 <a href="http://www.dailymotion.com/video/x6lund_om-2-1-sochaux-l1-300808_sport">OM 2 1 SOCHAUX (L1 - 30/08/08)</a></b><br /><i>
 envoyé par <a href="http://www.dailymotion.com/lephoceen">lephoceen</a></i></div>

Il s'en suit un certains nombre de warning généré par PHP :

 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlParseEntityRef: expecting ';' in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161
 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlParseEntityRef: expecting ';' in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161
 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: Unexpected end tag : param in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161
 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: Unexpected end tag : param in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161
 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: Unexpected end tag : param in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161
 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlParseEntityRef: expecting ';' in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161
 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlParseEntityRef: expecting ';' in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161
 [warning 2] DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: Tag embed invalid in Entity, line: 1 /home/ha/xxx/lib/jelix/utils/jFilter.class.php 161

Bref le code de Daily n'est pas très propre ( tag fermant </param> par exemple ) et loadHTML le modifie ( les balises fermantes </param> sont virées ).

Il reste le tag <embed> "Tag embed invalid in Entity" la fonction continue à générer un warning. Le seul moyen est-il de désactiver les "warning" sur le site ? C'est un peu dommage à priori le type "html" est censé se préoccuper simplement des balises scripts, XSS etc...

Donc voila je trouve ce nouveau type "html" intéressant, il permet dans un daocrud d'afficher le contenu (dans le cas présent la vidéo) avec l'action "view" plutot que le script lui même mais s'il faut désactiver les warning pour cela c'est bête courgette...

Merci de partager vos idées :)

  [Opened] Re: Jelix 1.1 et loadHTML

Reply #1 Posted by laurentj on 10/03/2008 13:08

Salut,

Le HTML a une syntaxe, qu'il convient de respecter. Et je suis pour le respect du langage HTML.

Bref, on ne copie-colle pas des bouts de HTML n'importe comment : si il contient des erreurs, j'estime que c'est à toi de les corriger, et pas le programme de s'adapter. Ou sinon cherche/développe moi un parser HTML "laxiste", qui soit aussi performant que l'API DOM, et pas en 5000 lignes de code.

Maintenant, il y a peut être une amélioration à faire : mettre en erreur le champs de saisie quand le HTML est invalide. Apparement, ça ne semble pas pris en charge (créé un ticket sur developer.jelix.org)

Il reste le tag <embed> "Tag embed invalid in Entity" la fonction continue à générer un warning. Le seul moyen est-il de désactiver les "warning" sur le site ?

Non. En HTML, le & est un caractère reservé. Il faut donc l'échapper si on veut vraiment l'utiliser en tant que caractère : &amp;

  [Opened] Re: Jelix 1.1 et loadHTML

Reply #2 Posted by Surfoo on 05/28/2009 15:43

Up !

J'ai eu le même problème, j'ai mis un @ sur la ligne concerné en attendant mieux :

 if(!@$doc->loadHTML($head.$html.$foot)) {
     return 1;
 }
 
Page
  1. Jelix 1.1 et loadHTML