2014-01-21 35 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