2016-08-14 265 views
-1

我有一個名爲的評論。用戶將他的評論寫入其中並在帖子下發送。類似的StackOverflow的評論:我應該如何將HTML標籤存儲到數據庫中?

enter image description here

正如你看到的,有一個<a>標籤成新評論。這將是存儲在數據庫中是這樣的:

enter image description here

當我再次讀取它,它打破了我的網站的HTML:

enter image description here

我的意思是<a>後一切將成爲一個鏈接。我不想那樣。我怎樣才能防止這種情況發生?

+1

你不應該在數據庫中存儲標記。 – duffymo

+0

@ Script47號..我不想允許任何標籤.. –

+0

如果您允許樣式化註釋,那麼如何避免在數據庫中存儲標記@duffymo – 2016-08-14 21:06:54

回答

4

如果您不想存儲標籤,請使用strip_tags,如果您仍然希望有標記,請使用類似Parsedown的東西。

$string = '<b>Hello,<> please remove the <> tags.</b>'; 

echo strip_tags($string); 

輸出

Hello, please remove the tags. 

更新

你實際上是在尋找什麼是htmlspecialchars

<?php 

    $str = 'Hello <a href="">blah</a>.'; 

    echo htmlspecialchars($str, ENT_QUOTES); 

?> 

輸出

Hello <a href="">blah</a>. 
+1

給予好評的努力:-)作爲OP不僅僅是有點令人困惑 – 2016-08-14 21:14:37

+0

只是一件事,你爲什麼使用'ENT_QUOTES'? –

+0

檢查我爲該功能提供的鏈接中的標誌表。 – Script47

0

你可以使用一些插件確實WordPress的他們改變<和>的[和]。

爲了防止代碼注入我建議只更換下列標籤

<p></p><ul></ul><li></li><a></a>  


這是在客戶端完成通過JavaScript和發送到服務器通過Ajax:

$("yourtag").replace(/</g, "[").replace(/>/g, "]").replace(/"/g, "'").replace(/&nbsp;/g, "andnbsp"); 


如果你是使用PHP從數據庫中檢索數據,你需要在存儲html的列上使用strreplace,用<>來更改[],這樣你的代碼就不會中斷

請記住,只允許您想要的標籤,因爲它允許各種標籤打開安全門,這是在服務器端languaje donde。

希望這有幫助...

+0

通過客戶端進行消毒不是最可靠的解決方案,如果禁用了JavaScript,該怎麼辦? – Script47

+0

這就是爲什麼我強調在最終服務器端語言應該只用於允許某些標籤。 –

相關問題