2014-09-10 153 views
1

我試圖使用TinyMCE(版本4.1.2)作爲WYSIWYG編輯器。登錄用戶可以編寫他們自己的頁面,並直接查看當訪問者訪問時頁面上顯示的內容。TinyMCE消毒輸入

現在,我想要直接存儲html。例如:

登錄的用戶看到This is my text!,但事實上TinyMCE將其顯示爲<p>This is my text!</p>。還有一些樣式,如<h1>和可以添加的鏈接。

現在,用戶可以插入超鏈接,給出應該顯示的鏈接和文本。然而問題是,如果用戶手動編寫<a href='example.com'>Example</a>,它會在編輯器中顯示,但是也會以純html形式存儲,因此顯示時只會顯示文本Example的超鏈接。

這是我的代碼是如何排序的樣子(左出配置):

tinymce.init({ 
    setup: function(editor){ 
     editor.on('change', function(e){ 
      $('[name="'+editor.id+'"]').next("textarea").html(editor.getContent({format: 'html'})); 
     }); 
    } 
}); 

所以從TinyMCE的字段中的文本被複制到一個<textarea>這是被保存時提交<form>內。

事情是這樣的:

TinyMCE input of user

被存儲爲:

<h1>Title</h1> 
<p><a href="example.com">example</a></p> 
<p><a href="example.com">test</a></p> 

這讓我沒有辦法區分真正的鏈接和純文本,等以後我不能處理它存儲數據。

我已經撥弄editor.getContent({format: 'html'})格式選項,如format: 'raw',但無濟於事。我究竟做錯了什麼?

回答

1

希望我正確理解你的問題。

它看起來像你想顯示任何你的用戶輸入,正如他們輸入它沒有實際處理HTML用戶寫入任何HTML。我對麼? 我相信這個解決您所遇到的問題:

https://kokoblog.net/php/fix-tinymce-auto-convert-html-code-to-element-tag

不過,如果你只關心它的外觀它的存儲位置,而不是如何它看起來時,它的流程,那麼你會希望將代碼塊添加到tinyMCE中,並確保您的用戶瞭解他們在編寫原始HTML時需要選擇代碼選項。

style_formats : [{title : 'Code', inline : 'code'}] 

源:Add "code" button to wordpress tinyMCE

我希望這有助於! :)

+0

謝謝,但它不是我真正想要的。編輯器中的樣式代碼實際上是'

Title

',這很好。但是,當用戶手動編寫'

標題

'時,我想要像那樣原始顯示它。因此,只有用戶編寫的內容應該像'htmlspecialchars()'一樣進行處理,以防止意外關閉額外的標籤並僅允許編輯器支持的標籤。 – jdepypere 2014-09-10 23:26:56

+0

好的,是的,這是我的想法...在這種情況下,您需要啓用代碼標記格式並讓您的用戶使用它。由於TinyMCE所做的唯一事情就是將文本封裝在HTML中,因此它無法檢測是否重新包裝了預格式化的HTML。這與大多數其他類似的編輯器相同,實際上很少有強制HTML代碼被顯示,而不是被解析。 – Ethan 2014-09-10 23:56:35

+0

我想另外一個選擇是編寫一個javascript擴展,它會在你正在寫的時候查找html標籤,如果發現一個標籤,它會自動將它包裝在[code] ... [/ code]段中。 – Ethan 2014-09-10 23:57:16