2014-09-29 32 views
1

我在使用HTMLPurifier php庫時遇到了問題。我在我的應用程序的所有文本區域使用名爲'Summernote'的所見即所得編輯器。所見即所得在純化後呈現的腳本標記

當寫內部sommernote喜歡的東西:

<script>alert('test');</script>

POST數據來作爲通過

<p>&lt;script&gt;alert('test');&lt;/script&gt;</p>

然而,一旦這是通過HTMLPurifier跑了,它不會刪除腳本標籤被轉換成普通字符。所以當我在summernote中編輯這個文本時,它實際上運行腳本!

這裏是什麼處理到編輯器中的圖像:

HTML Purifier Issue

這裏是如何存儲在數據庫中:

HTML Purifier Issue - 2

如果任何人有任何想法,請讓我知道!

編輯:另外,如果我禁用了Summernote所見即所得編輯器,使用HTMLPurifier進行清理時,將成功從textarea中刪除標籤。

回答

5

我懷疑這裏的根本問題是一個常見的錯誤:

當你輸出純HTML到您的所見即所得,您需要使用就可以了htmlspecialchars()。因此,而不是有這個在渲染頁面的源代碼

<textarea ...> 
    <p>&lt;script&gt;alert('test');&lt;/script&gt;</p> 
</textarea> 

...你需要有這樣的:

<textarea ...> 
    &lt;p&gt;&amp;lt;script&amp;gt;alert('test');&amp;lt;/script&amp;gt;&lt;/p&gt; 
</textarea> 

然後按預期所見即所得應有的功能。 (如果沒有,愛德華其實是對的 - 你應該看看不同的編輯器。)

這是做這件事的正確方法的原因是因爲你想在你的textarea中使用文本,而不是HTML。如果考慮一個沒有HTML Purifier的場景,並且有人輸入</textarea>標籤,然後輸入其他標籤,這是最容易實現的。那些會跳出<textarea>,所見即所得。所以你把你輸出的東西放在htmlspecialchars()周圍,這應該是textarea中的文本。它可以直接處理HTML標籤的事實是一個巧合 - 它很具誤導性,如果它不起作用可能會更好,但大多數瀏覽器仍然會顯示HTML標籤,就好像它們已被轉義,如果你不做到這一點。

一旦文本被正確轉義,然後所見即所得可以進來,將文本和解釋爲HTML。

看看htmlspecialchars()是否解決了您的問題。它應該這樣做,沒有導致副作用,即使這現在可能看起來反直覺。

(當然,如果你已經使用htmlspecialchars()所描述的,那麼我恐怕沒有一個想法副手。)

+0

這是問題(使用'輸出用htmlspecialchars()'來編輯),我完全忘了這個功能。萬分感謝! – 2014-09-30 19:14:00

+0

甜。很高興你修好了它! :) – pinkgothic 2014-09-30 21:44:46