2009-12-05 103 views
1

對於我的應用程序,我定製了一些WMD的行爲方式,因此當用戶輸入空行時,這些行爲將在HTML輸出中反映爲<br />'s。現在我來到了一個地方,我應該將它存儲在後端的某個地方,所以在通過SO帖子一段時間後,我不確定什麼是最好的方式來做到這一點。我有幾個選擇,如果你能指出哪些他們的優點/缺點,將不勝感激。使用自定義WMD編輯器對HTML進行降價

  1. 發送到服務器並存儲爲標記而不是HTML。對我來說,明顯的優勢是保持與用戶最初輸入的格式完全相同。但是,如何將其轉換回HTML以便顯示給客戶端? 在客戶端轉換它似乎非常麻煩,因爲即使可能發生JS會被禁用的情況,也會出現這種情況。如果我想在服務器上執行此操作,那麼HTML標記服務器端標記實現可能會花費大量資源。你認爲這會是一個問題嗎?即使情況並非如此,那麼正如我所提到的,我的WMD實施是定製的,而且那些服務器端解決方案無論如何都不可能正確地轉換爲降價,並且總會存在某種轉換錯誤的風險。

  2. 以轉換後的HTML形式發送到服務器。與上述相同,客戶端的轉換將會很困難,服務器端可能會發生錯誤。

  3. 發送原始降價並轉換HTML並存儲兩者。沒有性能問題與在客戶端將標記轉換爲HTML相關,也不在服務器端。用戶將始終使用相同的降價,他們最初輸入的和他們最初在預覽中看到的相同的HTML(儘管可能在php中進行了消毒處理)。它將不得不佔用兩倍的存儲空間,這是我最擔心的。

我傾向於傾向於第三種解決方案,因爲它看起來最簡單,但存在這種解決方案所需的雙倍存儲空間的擔憂。請記住,我的WMD實現稍有修改,並且我將使用PHP/MySql服務器端實現。

因此除了上面列出的3個選項外,還有其他解決方案可以解決我的問題嗎?我錯過了什麼重要的事情,會使其中一個選項更好,其餘的更好?還有哪些優點/缺點適用於我列出的每個解決方案?又如何在SO上實現?我讀過somwhere,他們使用了選項3,所以如果它足夠好,對我來說就足夠了:)但不知道它的真實性如何,那麼它是如何完成的?

也請原諒我,但至少有一次我要說,StackOverflow是網上最好的資源,我真的很感謝所有的人試圖在這裏幫助別人!這裏的網站和用戶簡直太棒了!

回答

2

發送到服務器降價或轉換的HTML

從客戶端接受降價,而不是HTML的一個原因是,接受任意的HTML從客戶端是一種安全風險:如果你接受HTML然後客戶可能會向您發送帶有惡意代碼的HTML,您將存儲該惡意代碼,然後反饋(也許發送給其他客戶端:因此最終會將惡意代碼發送給其他客戶端)。出於這個原因,最好只接受來自客戶端的降價(不是HTML)。

如果我想在服務器上做到這一點,那麼標準的HTML標記服務器端實現可能是資源昂貴的。你認爲這會是一個問題嗎?

我不知道「標準服務器端實現」是什麼,但我想這(生成HTML)是服務器應該能夠處理的那種類型。

+1

通過「標準服務器端實現」我的意思是公共庫轉換HTML到降價在服務器端,如PHP降價的http:/ /michelf.com/projects/php-markdown – spirytus 2009-12-05 04:17:10

0

第四屆。選項是存儲標記,並在請求時使用服務器端庫將markdown呈現爲HTML,然後使用緩存來防止性能下降。

ChrisW對安全問題的評論 - 這是一個真正有效的關注消除這種輸入的關注點。但是,不要認爲減價是安全的錯誤。從我看到的WMD和它的showdown.js處理器,你仍然可以餵它的HTML,它會留在那裏。所以對於使用WMD編輯器的人來說,仍然有可能在<script>或其他任何地方進入。

實際上是在談論這讓我覺得我需要檢查我目前執行的這個..