2013-07-03 91 views
2

從Word粘貼時,Ckeditor 4中的清理通常非常好。不過我注意到兩件事情,當Word文檔不理想的格式:Ckeditor 4 - 刪除nbsp; <p></p>從word粘貼後

  1. 如果Word文檔中包含「&nbsp;&nbsp;」這個被複製爲在CKEDITOR。我想簡單地在貼上插入「」。

  2. 從Word粘貼往往創建「<p>&nbsp;</p>」。我已經通過使用fillEmptyBlocks = false部分解決了這個問題,這意味着我剩下了「<p></p>」。

我不知道如何添加額外的JavaScript函數來擴展Ckeditor的功能來解決這些問題。 Ckeditor 4提供了一個高級內容過濾器,但文檔對我來說很坦然,而且不清楚它是否可以實現上述目標。

這是我目前CKEDITOR config.js:

CKEDITOR.editorConfig = function(config) { 
    config.toolbar = <removed>; 
    config.format_tags = 'p;h2;h3;div'; 
    config.contentsCss = '/css/site.min.css'; 
    config.height = 500; 
    config.removePlugins = 'elementspath'; 
    config.resize_enabled = false; 
    config.allowedContent = true; 
    config.fillEmptyBlocks = false; 
}; 

我已經嘗試此CKEDITOR 3式的方法,這似乎並沒有工作。 evt.data.dataValue確實包含編輯器的HTML。

CKEDITOR.on('instanceReady', function(ev) { 
    ev.editor.on('paste', function(evt) { 
    evt.data.dataValue = evt.data.dataValue.replace('&nbsp;',''); 
    evt.data.dataValue = evt.data.dataValue.replace('<p></p>;',''); 
    console.log(evt.data.dataValue); 
    }, null, null, 9); 
}); 

答案必須包括通過某種形式的Ckeditor在粘貼事件,與Ckeditor交互的功能或通過ACF進行此項工作。請不要在保存PHP的時候提出這樣的建議,我認爲這是最後的手段,並且能夠自己做到這一點。

謝謝!

+0

您的意思是Word中的實際文本類似於「這是一個實體的示例: 」?在這種情況下,將其保留爲文本是正確的。或者當粘貼 得到生成的內容?對我來說,我用'config.removePlugins ='elementspath,entities'處理這個問題,但那只是因爲我真的不想要任何實體,這可能對你沒有用。 – Nenotlep

+0

Word文檔有時包含nsbp(看起來像空格),粘貼時在Ckeditor源視圖中顯示爲' '。雖然Word真的有問題,但我只是將其視爲Ckeditor粘貼階段的自定義清理階段。 – Ben

+0

在這種情況下不會 實際上是正確的?如果你不想要實體,我會再次完全刪除實體插件。我將我的內容保存爲Unicode XML,因此對於我來說,實體實際上完全分解了內容。據我所知,ACF在這裏不能幫你,因爲它不會觸及內容,並且有部分內容。 – Nenotlep

回答

8

經過大量調試後發現它。問題中的方法實際上是現貨,但我錯誤地認爲JS替換功能取代了全局。所以發生的只是第一次被刪除。下面是一個使用正則表達式的語法風格,在全球範圍更換修正版:

CKEDITOR.on('instanceReady', function(ev) { 
    ev.editor.on('paste', function(evt) { 
    evt.data.dataValue = evt.data.dataValue.replace(/&nbsp;/g,''); 
    evt.data.dataValue = evt.data.dataValue.replace(/<p><\/p>/g,''); 
    console.log(evt.data.dataValue); 
    }, null, null, 9); 
}); 
+0

我們遇到了同樣的問題。感謝您找出答案。 – Bopp

0

我使用CKEditor的4.7和我的情況下,當我從Gmail中粘貼,它的最終結果添加<p><br></p>。這在編輯器中顯示爲一個巨大的空白空間。爲了解決這個問題我使用了下面的CSS

p:not(:first-child):empty { 
    display:none 
} 
p:not(:first-child) > br { 
    display:none 
}