2015-04-23 60 views
4

我們使用管理平臺(https://github.com/a-ono/redmine_ckeditor)的CKEditor的插件,遇到以下問題:實體編碼 - 沒有完美的解決方案?

作爲插件的開發者,它說:「似乎沒有完美的解決方案。」

我發現了http://komlenic.com/246/encoding-entities-to-work-with-ckeditor-3/,http://ckeditor.com/forums/Support/inside-tries-create-paragraph#comment-54348和一些關於「forceSimpleAmpersand:true」以及config.entities_latin = false的附加信息,但我不太確定如何繼續。我們正在將其他用戶遷移到Redmine,但如果他們無法發佈鏈接或xml/html內容(例如,作爲錯誤報告的一部分),那麼它就會成爲一個表現障礙(例如,作爲錯誤報告的一部分)

因此,所有CKEditor的優點。任何提示?

+0

現在應該解決。 https://github.com/a-ono/redmine_ckeditor/issues/158 –

回答

2

對不起,但看起來Redmine的插件已損壞。 CKEditor本身在這裏沒有任何關係 - 它可以正確讀寫實體如果數據加載正確。如果某些實體在將它們保存到數據庫中並加載它們後被解碼或編碼太多,則意味着後端已損壞。而不是觸及CKEditor的默認選項,後端應該是固定的(意思是Redmine的插件,或者不太可能,Redmine本身)。

讓我們考慮下面的情況。你想寫你的評論關於<xml>標籤。它的HTML將是:

<p>This is a tag: <code>&lt;xml&gt;</code>.</p> 

而這也將editor.getData()返回什麼,或者會發布到服務器,如果是使用<textarea>自動集成。

現在,如果你這樣做(在demo例如):

editor.setData('<p>This is a tag: <code>&lt;xml&gt;</code>.</p>'); 

一切都會完全罰款。相同的內容會顯示:

Loading data using editor.setData()

然而,許多開發人員使用CKEditor的整合與<textarea> S和,不幸的是,他們並不完全瞭解它是如何工作的。讓我們來加載存儲在一個數據庫到一個textarea的確切數據:

<textarea><p>This is a tag: <code>&lt;xml&gt;</code>.</p></textarea> 

如果您現在嘗試讀取使用textarea.value從JavaScript這個textarea的價值,你會得到:

<p>This is a tag: <code><xml></code>.</p> 

正如你可以看到,<xml>標記的編碼丟失了,因爲在HTML中,&lt;被讀爲<

所以,你需要做的就是把它們裝到一個文本才重新對數據進行編碼:

<textarea>&lt;p&gt;This is a tag: &lt;code&gt;&amp;lt;xml&amp;gt;&lt;/code&gt;.&lt;/p&gt;</textarea> 

現在檢查所有<字符成爲&lt;,但已編碼&lt;成爲&amp;lt;。這將確保在將數據打印到HTML時所有實體都能正確保存。正如你所看到的,它與CKEditor無關。這同樣適用於顯示在CKEditor中創建的數據 - 編碼必須保留。如果丟失了某些東西,這意味着後端將對數據進行編碼或解碼,而不應該這樣做。

+0

感謝您的詳細解答。我希望我們會在這裏取得一些進展。 –

+0

我不明白這一點:'''正如你所看到的那樣,標記的編碼丟失了,因爲在HTML中,<被讀爲<.''';爲什麼會被解釋爲HTML,因爲不是[textarea應該只包含純文本](https://www.w3.org/TR/html5/sec-forms.html#elementdef-textarea)。爲什麼該值會被解碼爲HTML實體?而且,首先,執行該解碼的是什麼?瀏覽器的Javascript實現?對不起,也許微不足道的問題。 – Kamafeather

0

我們有一個用戶堅持在wiki的python代碼塊中放入python解釋器「>>>」。 這些被轉換爲HTML實體& gt; & gt; & gt;當保存到wiki數據庫。查看時,它們不會轉換回「>>>」,因爲它位於<前>區塊內。

我發現,改變的插件/ redmine_ckeditor/lib中/ redmine_ckeditor/wiki_formatting/formatter.rb線17:

%Q[<pre>\n<code class="#{lang} syntaxhl">#{ 
     Redmine::SyntaxHighlighting.highlight_by_language(code, lang) 
    }</code>\n</pre>] 

%Q[<pre>\n<code class="#{lang} syntaxhl">#{ 
     Redmine::SyntaxHighlighting.highlight_by_language(CGI.unescapeHTML(code), lang) 
    }</code>\n</pre>] 

解決我們的問題與代碼HTML實體。

相關問題