2011-10-14 185 views
1

我正在使用tinyMCE的小網站,人們用它來寫簡單的文章。 Usualy他們用MS word寫文本並將文本複製到tinyMCE並提交。TinyMCE刪除有效標籤

,這就是爲什麼我只允許幾個標籤:

valid_elements: "a[href|target],strong/b,em/i,div[align],br,p[style|align],ul,li,ol,table,tr,td,iframe[*],img[*]", 

但是,儘管允許IMG [*]僅 '插入/編輯圖片' 插入圖片後:

<img alt=""/> 

出現在代碼。 iframe(完全刪除) 我已經嘗試了valid_elements的每個組合,其中包含img和iframe屬性的完整列表以及extended_valid_elements。

當我刪除valid_elements子句時,一切正常,但不允許(h1,h2等)的文字格式弄亂了樣式。

TinyMCE版本是3.4.2。

回答

1

我在tinymce粘貼插件中使用了paste_preprocess設置,我在那裏過濾了不需要的標籤。這裏有一個例子:

在TinyMCE的初始化

paste_preprocess : function(pl, o) { 
    //if(console) console.log('Object', o); 
    //if(console) console.log('Content:', o.content); 
     // usage param1 = the string to strip out tags from, param2 = tags to keep in the string 
    o.content = ir.im.strip_tags(o.content,'<p><div><br><br/>'); 
}, 

幫助功能,剔除標籤:

strip_tags = function (str, allowed_tags) { 
    var key = '', allowed = false; 
    var matches = []; var allowed_array = []; 
    var allowed_tag = ''; 
    var i = 0; 
    var k = ''; 
    var html = ''; 
    var replacer = function (search, replace, str) { 
     return str.split(search).join(replace); 
    }; 
    // Build allowes tags associative array 
    if (allowed_tags) { 
     allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi); 
    } 
    str += ''; 

    // Match tags 
    matches = str.match(/(<\/?[\S][^>]*>)/gi); 
    // Go through all HTML tags 
    for (key in matches) { 
     if (isNaN(key)) { 
      // IE7 Hack 
      continue;  } 

     // Save HTML tag 
     html = matches[key].toString(); 
     // Is tag not in allowed list? Remove from str! 
     allowed = false; 

     // Go through all allowed tags 
     for (k in allowed_array) {   // Init 
      allowed_tag = allowed_array[k]; 
      i = -1; 

      if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}   
      if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');} 
      if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag) ;} 

      // Determine 
      if (i == 0) {    allowed = true; 
       break; 
      } 
     } 
     if (!allowed) { 
      str = replacer(html, "", str); // Custom replace. No regexing 
     } 
    } 

    return str; 
};