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

  [Opened] Tag ctrl_value_decode

Posted by cowa on 01/18/2008 11:04

Ma proposition serait de pouvoir via le tag {ctrl_value_decode chaine} afficher la chaine en HTML décodé. Ce tag serait dérivé de {ctrl_value chaine}

Exemple : j'ai enregistré via FCKeditor du code HTML et je voudrais le restituer "tel quel".

Voici le code que je propose

 function jtpl_function_html_ctrl_value_decode($tpl, $ctrlname='', $sep =', '){
 
    if( (!isset($tpl->_privateVars['__ctrlref']) || $tpl->_privateVars['__ctrlref'] == '') && $ctrlname =='') {
        return;
    }
    $insideForm = isset($tpl->_privateVars['__formbuilder']);
 
    if($ctrlname =='') {
        if(($tpl->_privateVars['__ctrl']->type == 'submit')
                && ($tpl->_privateVars['__ctrl']->standalone || $insideForm)){
            return;
        }
        if(($tpl->_privateVars['__ctrl']->type == 'reset') && $insideForm){
            return;
        }
        $tpl->_privateVars['__displayed_ctrl'][$ctrlname] = true;
        $ctrl = $tpl->_privateVars['__ctrl'];
        $ctrlname = $tpl->_privateVars['__ctrlref'];
    }else{
        $ctrls = $tpl->_privateVars['__form']->getControls();
        if(($ctrls[$ctrlname]->type == 'submit' || $ctrls[$ctrlname]->type == 'reset')
                && ($ctrls[$ctrlname]->standalone || $insideForm)){
            return;
        }
        $ctrl = $ctrls[$ctrlname];
    }
 
    $value = $tpl->_privateVars['__form']->getData($ctrlname);
    $value = $ctrl->getDisplayValue($value);
    if(is_array($value)){
        $s ='';
        foreach($value as $v){
            $s.=$sep.htmlspecialchars($v);
        }
        echo substr($s, strlen($sep));
    }else
        echo htmlspecialchars_decode($value);
 }
 
 ?>

Seule la dernière ligne echo htmlspecialchars_decode($value); change par rapport à {ctrl_value chaine}

  [Opened] Re: Tag ctrl_value_decode

Reply #1 Posted by laurentj on 01/18/2008 12:57

Salut,

puisqu'il y a juste une ligne qui change, peut-être aurait-il été plus simple de rajouter un argument au plugin (genre un booleén), non ? ;-)

Mais il y a tout de même un problème à ce plugin : son utilisation n'est pas générique. C'est à dire que le problème original apparait toujours si on utilise formcontrols ou formfull. Le mieux serait de hacker jForms pour rajouter <textarea type="html"> par exemple, et il y aurait donc un boolean sur l'objet contrôle correspondant, et ainsi le plugin saurait quoi faire. (c'est étonnant tout de même que la valeur qu'on reçoit du formulaire soit encodée...)

Bon sinon, dans la version 1.1, il y aura les <textarea wysiwyg="true"> ;-) (avec tinyMCE derrière trés probablement ou peut être wymeditor, FCKeditor étant connu pour sa lourdeur et ses trous de sécurité XSS et cie)

  [Opened] Re: Tag ctrl_value_decode

Reply #2 Posted by cowa on 01/18/2008 17:03

On a bien dans $_POST'texte' du html non encodé. Seul explication donc : c'est fckeditor qui encode le contenu, ce qu'il ne devrait pas faire. À moins que ce soit jelix quelque part mais je n'ai pas souvenir d'avoir fait de l'encodage à la réception des données.

Certes, le comportement initial d'un textarea c'est de laisser la saisie telle quelle, mais quand on a un éditeur wysiwyg, il encode le HTML qu'on saisit (i.e. nos caractères spéciaux et pas ses propres balises <span> <p> et autres). J'ai installé TinyMCE et le problème est le même qu'avec FCKeditor... Quand le code est reçu côté contrôleur, on a malheureusement bien du HTML encodé de partout (&gt; etc).

A priori, c'est pas l'éditeur wysiwyg qui pose problème puisque quand je fais un body.onload avec

 $('jform1').onsubmit = test;
 
 function test() {
   alert($('jform1_description').value);
 }

J'obtiens pour "test<>III" du HTML non encodé (il n'encode que mes <>)

 <p>test&lt;&gt;<span style="text-decoration: underline;"><em><strong>III</strong></em></span></p>

Mais dans mon contrôleur, j'obtiens

 &lt;p&gt;test&amp;lt;&amp;gt;&lt;span style="text-decoration: underline;"&gt;&lt;em&gt;&lt;strong&gt;III&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;

PS : mon form est on ne peut plus simple, il n'y a pas de escapehtmlchars comme je crois me rappeler qu'il y a une fonctionnalité comme telle...

 <textarea ref="description">
   <label>Description</label>
 </textarea>
 
Page
  1. Re: Tag ctrl_value_decode