2016-03-01 35 views
1

我有一個用戶輸入內容的CKEDITOR實例(版本4.5.7)。此內容發佈到數據庫字段中,其排序規則爲SQL_Latin1_General_CP1_CI_AS替換/限制CKEDITOR中的非標準字符

當用戶從Word或類似的富文本編輯器粘貼文本時,就會出現問題。特別是當兩個字符碰到數據庫時變得格格不入:」 (”)– (–)

我已經將config.entities設置爲false,以防止將字符轉換爲其等效的HTML。現在我正在尋找一個我可以攔截過程來查找/替換任何違規字符的地方。雖然這種事情的javascript很容易(text = text.replace('」', '"')),但我不知道爲了實現這個目的而把它放在哪裏。我試過將它放在CKEDITOR.htmlParser.basicWriter函數的各個位置,但目前爲止還沒有工作。

這似乎是一個相當普遍的問題 - 有沒有辦法在編輯器上設置排序規則,使其與數據庫匹配?

謝謝你的任何建議。

+1

這當然不是一個普遍的問題,因爲通常你會解決您的數據庫; |。如果用戶想要插入這些特定字符怎麼辦? – Reinmar

+0

@Reinmar你說這就像一件小事。更改整個公司的數據庫整理以修復相對較小的問題並不總是「最佳」解決方案。 – Typel

回答

0

我一直在basicWriter函數中徘徊,直到最終我驚訝地發現一個地方實際上工作。基本上,這是我用來解決這個問題的過程,無需編輯ckeditor.js

  1. 下載並打開未壓縮版本的ckeditor.js文件。
  2. 定位並將整個CKEDITOR.htmlParser.basicWriter函數複製到config.js文件的底部。這基本上重新定義了功能,覆蓋了真實的功能,但允許我們對其進行自定義,而不一定會打開未來的更新。
  3. 在config.js中的複製函數中,找到getHtml部分並在返回之前自定義html變量。下面是一個模板,以幫助您找到本節

getHtml: function(reset) { 
var html = this._.output.join(''); 

    // this is where we can replace individual characters or make other 
    // customizations 
    html = html.replace('」', '"'); 
    html = html.replace('–', '-'); 

    if (reset) 
    this.reset(); 

    return html; 
}