我应该如何将HTML标签存储到数据库中?
我有一个名为的评论。用户将他的评论写入其中并在帖子下发送。类似的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