2012-04-24 7 views
5

私は公式のドキュメントとブログ記事を何時間も読んできました。確かに答えはどこかに投稿されていますが、運はありません。tinymceが入力要素から 'style'属性を取り除くのを防ぐ方法は?

どの設定でも手間がかかりません。 tinymceが私の入力でインラインの 'style'属性を取り除くのを止めます/ <p>要素をサブミットしました。私はすべての入力要素のために 'スタイル'属性が必要です。しかし、私はちょうどそれを働かせるために<p>でテストすることから始めています。

  • TinyMCEのバージョンここでは3.5b3

は私の設定の最新の繰り返しです。 (多くのバリエーション/試練の中から):

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

ありがとうございました!

答えて

3

This fiddleは、あなたの設定が完全​​に完璧であることを示しています。スタイル属性はすべての要素に許可されていますが、取り除かれません。

+1

はい、私はテストとしてすべてを切り離しました。あなたは言っているように、期待通りに動作します。だから私は、スタイル属性を取り除いていることを理解する必要があります...私が使用しているPHPフレームワーク、CodeIgniter、または何か。私はあなたの答えを受け入れるためにここに戻ってきます。誰かがどこに犯人があるのか​​を考え出すのにもっと時間を節約する何かを投稿する場合に備えて、私はちょっと開いたままにしておきます。 ;-) – govinda

12

Thariamaは指摘したように、tinymceには問題はありませんでしたが、CodeIgniterの$config['global_xss_filtering'] = TRUE;が何をしているのか分かりませんでした。同じ問題が発生していることがわかった場合は、ここでそれに対処します。こちらをご覧ください: Codeigniter - Disable XSS filtering on a post basis

+0

+1と悪のソース – Thariama

+0

CodeIgniterは最悪のPHPフレームワークの1つです。 –

0

あなたがbase64decodeする必要があなたのコントローラで明らかにこれ

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

のように、AJAX要求を試すことができます...

0

私もCodeIgniterのを使用していますが、私は$config['global_xss_filtering'] = false;を設定しなかったが、私はまだ持っていましたスタイル属性の問題だから、解決策のどれもがあなたのために働いていない場合、あなたはJavascriptを使用して隠しフィールドにそれを提出し、場所にBASE64でTinyMCEのデータを符号化してみてください:

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

あなたは元の文字列を保持し、それが簡単になることができますこの方法では、 PHPでデコードされた:

$htmlstring = base64_decode($_POST['hiddenField']); 
関連する問題