2016-08-14 268 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

这就是为什么我强调在最终服务器端语言应该只用于允许某些标签。 –

相关问题