2012-04-24 12 views
5

Ho letto i documenti ufficiali e i post del blog e SO per ore, certo da qualche parte la risposta sarebbe già stata pubblicata .. ma senza fortuna.come impedire a tinymce di rimuovere l'attributo 'style' dall'elemento input?

Sembra che nessuna quantità di giocherellare con alcuna configurazione. impedisce a tinymce di rimuovere l'attributo "stile" in linea sul mio input/elemento inviato <p>. Ho bisogno dell'attributo 'style' per tutti gli elementi di input .. ma sto solo iniziando testando con <p> per farlo funzionare.

  • tinymce versione 3.5b3

Ecco l'ultima iterazione della mia config. (di molte varianti/tentativi):

tinyMCE.init({ 
    mode : "textareas", 
    theme : "advanced", 

    plugins : "emotions,spellchecker,advhr,insertdatetime,preview,paste,table,media,directionality,style,xhtmlxtras,nonbreaking,pagebreak", 

    theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,formatselect,fontselect,fontsizeselect", 
    theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor", 
    theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,ltr,rtl", 
    theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,nonbreaking,pagebreak", 

    theme_advanced_toolbar_location : "top", 
    theme_advanced_toolbar_align : "left", 
    theme_advanced_statusbar_location : "bottom", 
    theme_advanced_resizing : true, 

    doctype : "<!DOCTYPE html>", 

    convert_urls : false, 

    //template_external_list_url : "gen4tinymce/lists/template_list.js", 
    external_link_list_url : "gen4tinymce/lists/link_list.js", 
    //media_external_list_url : "gen4tinymce/lists/media_list.js", 

    valid_elements : "@[id|class|style|title|dir<ltr?rtl|lang|xml::lang]," 
    + "a[rel|rev|charset|hreflang|tabindex|accesskey|type|" 
    + "name|href|target|title|class],strong/b,em/i,strike,u," 
    + "#p[style],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|" 
    + "src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup," 
    + "-blockquote,-table[border=0|cellspacing|cellpadding|width|frame|rules|" 
    + "height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|" 
    + "height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot," 
    + "#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor" 
    + "|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div," 
    + "-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face" 
    + "|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite]," 
    + "object[classid|width|height|codebase|*],param[name|value|_value],embed[type|width" 
    + "|height|src|*],map[name],area[shape|coords|href|alt|target],bdo," 
    + "button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|" 
    + "valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method]," 
    + "input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value]," 
    + "kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value]," 
    + "q[cite],samp,select[disabled|multiple|name|size],small," 
    + "textarea[cols|rows|disabled|name|readonly],tt,var,big", 

    extended_valid_elements : "p[style]", 
    inline_styles : true, 
    verify_html : false 
}); 

Grazie per eventuali suggerimenti!

risposta

3

This fiddle indica che la configurazione di tinymce è assolutamente perfetta: l'attributo di stile è consentito per tutti gli elementi, non viene eliminato.

+1

sì, ho messo a nudo giù il tutto come un test .. isolare SOLO TinyMCE e funziona come previsto, come dici tu e spettacolo. Quindi ho bisogno di capire cosa sta spogliando l'attributo di stile ... il framework PHP che sto usando, CodeIgniter, o cosa. Torno qui per accettare la tua risposta .. Lascio semplicemente aperta per il momento nel caso qualcuno pubblichi qualcosa che mi fa risparmiare ancora più tempo nel capire dove giace il colpevole. ;-) – govinda

12

Come ha sottolineato Thariama, Tinymce non era esente da colpa .. ma era la mia mancanza di sapere cosa stava facendo tutto di CodeIgniter $config['global_xss_filtering'] = TRUE;. Se scopri che stai riscontrando lo stesso problema, ecco come l'ho affrontato; vedere qui: Codeigniter - Disable XSS filtering on a post basis.

+0

+1 per una soluzione di lavoro e la fonte del male – Thariama

+0

Non usare CodeIgniter è uno dei peggiori framework PHP in circolazione;) –

0

si può provare con una richiesta AJAX, come questo

$("#submit").click(function(e) { 
    ie8SafePreventEvent(e); 
    var form_data = $("#form").serialize(); 
    var content = $.base64.encode(tinyMCE.activeEditor.getContent()); 
    $.ajax({ 
     type: "POST", 
     url: "/your/post/processor", 
     data: form_data + "&coded_content=" + content, 
     success: function(return_msg){ 
      do_something 
      }, 
     error: function(){ 
      alert("Sorry, we got an error, try later"); 
      } 
     }); 
    }); 

Ovviamente nel controller si deve base64decode ...

0

Sono anche utilizzando CodeIgniter e mentre io ho impostato $config['global_xss_filtering'] = false; avevo ancora il problema con l'attributo style. Quindi, se nessuna delle soluzioni lavorato per voi, si può provare la codifica dei dati TinyMCE in base64 su invia e metterlo in un campo nascosto utilizzando Javascript:

$('#hiddenField').val(window.btoa(tinyMCE.get('tinyMCEtextareaID').getContent())); 

In questo modo si mantiene la stringa originale e può essere facilmente decodificati in PHP utilizzando:

$htmlstring = base64_decode($_POST['hiddenField']); 
Problemi correlati