我应该如何将HTML标记存储到数据库中?

时间:2016-08-14 21:05:00

标签: php html mysql css

我有一个名为 comment 的输入。用户将其评论写入其中并在帖子下发送。像StackOverflow的评论:

enter image description here

如您所见,新评论中有<a>个标记。它将存储在数据库中,如下所示:

enter image description here

当我再次获取它时,它会破坏我网站的HTML:

enter image description here

我的意思是<a>之后的所有内容都是链接。我不希望这样。我该如何防止这种情况发生?

2 个答案:

答案 0 :(得分: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 :(得分:0)

你可以使用一些插件在wordpress上做的更改&lt;和&gt;对于[和]。

为了防止代码注入,我建议只替换以下标记

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


这是通过客户端的javascript完成并发送到服务器víaajax:

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


如果您使用php从数据库中检索数据,则需要在存储html的列上使用strreplace,使用&lt;&gt;更改[],这样您的代码就不会中断了<登记/> 请记住,只允许您想要的标签允许所有类型的标签打开门,以确保安全,这是在服务器端语言上提供的。

希望这有用......