我正在尝试在我的网站上的评论框表单中显示评论。我最初使用以下方式显示它:
<?php while($comment_text = mysqli_fetch_assoc($display_comments)) { ?>
<div class="comment" style="margin-bottom: 2em;">
<div class="author">
<b><?php echo htmlentities($comment_text["author"]); ?></b>
<span class="datetime">
<i><?php echo datetime_to_text($comment_text["created"]); ?></i>
</span>
</div>
<div class="body">
<?php echo strip_tags($comment_text["body"], '<strong><em><p>'); ?>
</div>
</div>
<?php } ?>
当显示“body”文本时,我使用“strip_tags”。但是,我听说我应该使用htmlentities或htmlspecialchars,因为它更安全,但每当我尝试用其中一个替换“strip_tags”时,注释就不会显示。它只是显示评论的作者,然后在它下面没有任何内容。
表单工作正常,每当我发布到我的数据库时,我都会使用“mysqli_real_escape_string”。我看到数据库中的注释,当我使用htmlentities或htmlspecialchars时它们就不会显示。
我是php的新手,我想确保我的表格安全。任何帮助将不胜感激!
更新:我尝试过显示不同的测试评论。当我使用htmlspecialchars时,什么都不会出现,即使它像“test”这样简单
答案 0 :(得分:1)
您必须选择要使用的内容:要么允许使用某些html标记,要么使用htmlspecialchars
,要么使用htmlspecialchars
并且不允许使用任何html。
请注意,第一个选项存在xss风险,因此如果内容不受信任,则不应使用它。
问题在于,当您使用htmlspecialchars
时,所有特殊字符都会被编码,因此您不会看到一些粗体文本,而是会在浏览器中看到围绕渲染文本的粗体开始和结束标记。