2012-04-24 17 views
5

He estado leyendo los documentos oficiales y las publicaciones de blog y SO durante horas, seguro de que la respuesta ya estaría publicada ... pero no tuve suerte.cómo evitar que tinymce elimine el atributo 'estilo' del elemento de entrada?

Parece que no hay forma de juguetear con ninguna configuración. impide que tinymce elimine el atributo "estilo" en línea en mi elemento input/submitted <p>. Necesito el atributo 'estilo' para todos los elementos de entrada ... pero recién estoy empezando probando con <p> para que funcione.

  • tinymce Versión 3.5b3

Aquí es la última iteración de mi config. (de muchas variaciones/intentos):

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 
}); 

¡Gracias por cualquier sugerencia!

Respuesta

3

This fiddle muestra que su configuración de tinymce es absolutamente perfecta: Estilo-atributo está permitido para todos los elementos, no se elimina.

+1

sí, lo desnudaron todo el asunto como una prueba de aislamiento .. SOLO tinymce y funciona como se espera, como usted dice y espectáculo. Entonces necesito descubrir qué es quitar el atributo de estilo ... el framework de PHP que estoy usando, CodeIgniter, o qué. Vuelvo aquí para aceptar tu respuesta. Simplemente la dejo abierta por el momento en caso de que alguien publique algo que me ahorre más tiempo para descubrir dónde está el culpable. ;-) – govinda

12

Como Thariama señaló, tinymce no tuvo la culpa ... pero fue mi falta de conocimiento de lo que estaba haciendo CodeIgniter's $config['global_xss_filtering'] = TRUE;. Si encuentra que está experimentando el mismo problema, aquí es cómo lo abordo; Por favor, mira aquí: Codeigniter - Disable XSS filtering on a post basis.

+0

+1 para una solución de trabajo y la fuente del mal – Thariama

+0

No use CodeIgniter es uno de los peores frameworks de PHP que existen;) –

0

se puede tratar con una petición Ajax, como este

$("#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"); 
      } 
     }); 
    }); 

Obviamente en su controlador tiene que base64decode ...

0

También estoy usando CodeIgniter y mientras me puse $config['global_xss_filtering'] = false; todavía tenía el problema con el atributo de estilo. Así que si ninguna de las soluciones trabajó para usted, usted puede intentar codificar los datos tinymce en base 64 en enviar y colocarlo en un campo oculto con Javascript:

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

De esta manera se conserva la cadena original y puede ser fácilmente decodificados en PHP usando:

$htmlstring = base64_decode($_POST['hiddenField']); 
Cuestiones relacionadas