我有一個名爲的評論。用戶將他的評論寫入其中並在帖子下發送。類似的StackOverflow的評論:我應該如何將HTML標籤存儲到數據庫中?
正如你看到的,有一個<a>
標籤成新評論。這將是存儲在數據庫中是這樣的:
當我再次讀取它,它打破了我的網站的HTML:
我的意思是<a>
後一切將成爲一個鏈接。我不想那樣。我怎樣才能防止這種情況發生?
我有一個名爲的評論。用戶將他的評論寫入其中並在帖子下發送。類似的StackOverflow的評論:我應該如何將HTML標籤存儲到數據庫中?
正如你看到的,有一個<a>
標籤成新評論。這將是存儲在數據庫中是這樣的:
當我再次讀取它,它打破了我的網站的HTML:
我的意思是<a>
後一切將成爲一個鏈接。我不想那樣。我怎樣才能防止這種情況發生?
如果您不想存儲標籤,請使用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>.
給予好評的努力:-)作爲OP不僅僅是有點令人困惑 – 2016-08-14 21:14:37
只是一件事,你爲什麼使用'ENT_QUOTES'? –
檢查我爲該功能提供的鏈接中的標誌表。 – Script47
你可以使用一些插件確實WordPress的他們改變<和>的[和]。
爲了防止代碼注入我建議只更換下列標籤
<p></p><ul></ul><li></li><a></a>
這是在客戶端完成通過JavaScript和發送到服務器通過Ajax:
$("yourtag").replace(/</g, "[").replace(/>/g, "]").replace(/"/g, "'").replace(/ /g, "andnbsp");
如果你是使用PHP從數據庫中檢索數據,你需要在存儲html的列上使用strreplace,用<>來更改[],這樣你的代碼就不會中斷
請記住,只允許您想要的標籤,因爲它允許各種標籤打開安全門,這是在服務器端languaje donde。
希望這有幫助...
通過客戶端進行消毒不是最可靠的解決方案,如果禁用了JavaScript,該怎麼辦? – Script47
這就是爲什麼我強調在最終服務器端語言應該只用於允許某些標籤。 –
你不應該在數據庫中存儲標記。 – duffymo
@ Script47號..我不想允許任何標籤.. –
如果您允許樣式化註釋,那麼如何避免在數據庫中存儲標記@duffymo – 2016-08-14 21:06:54