2014-01-21 36 views
1

我试图从评论框表单显示评论在我的网站上。我最初使用的是:htmlentities和htmlspecialchars停止显示文本

<?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,即使是一些简单的像“测试”

回答

1

你必须选择你要使用的:要么你允许某些HTML标记,你不能使用htmlspecialchars或使用htmlspecialchars做不允许任何HTML。

请注意,第一个选项有xss的风险,所以如果内容不可信,则不应使用它。

问题是,当您使用htmlspecialchars时,所有特殊字符都会被编码,所以您不会看到某些粗体文本,而是在字面上看到围绕浏览器中呈现文本的粗体打开和关闭标记。

+0

我知道最好使用hmlspecialchars,我只是不明白为什么它会阻止我的文本显示。我用真正简单的文本测试了它,没有html标签或任何东西,但仍然没有显示 – coolpup

+0

@coolpup您是否从函数中删除了第二个参数? – jeroen

+0

你的意思是strip_tags?我删除了它,并用htmlspecialchars替换它 – coolpup