2014-01-06 75 views
2

我有一個PHP表單,它從用戶收集CSS和HTML代碼。然後表單加載一個包含CSS和HTML的PHP​​頁面。PHP表單:HTML解釋不正確

我的問題是,HTML顯示爲純文本而不是HTML。

在手柄PHP文件,我用file_put_contents($newshtml, $html);

在最後的PHP文件,我用包括身體標記之間"html.html";

爲什麼HTML輸入不能解釋爲HTML?

處理程序PHP代碼

<?php 
    $newshtml="asset/html.html"; 
    $newscss="asset/style.css"; 
    $html=htmlentities($_POST['html']); 
    $css=htmlentities($_POST['css']); 
    $html=stripslashes(nl2br($html)); 
    $css=stripslashes(nl2br($css)); 

    if(!is_file($newshtml, $newscss)) 
    { 
     [email protected]($newshtml, "w+"); 
     [email protected]($newscss, "w+"); 
    } 
    [email protected]($newshtml, "r+"); 
    [email protected]($newscss, "r+"); 

    file_put_contents($newshtml, $html); 
    file_put_contents($newscss, $css); 

    header('Location: layout.php'); 
?> 

THE FINAL PHP代碼

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <link rel="stylesheet" type="text/css" href="style.css" media="screen"> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <meta name="viewport" content="initial-scale=1.0"> 
    <meta name="format-detection" content="telephone=no"> 
    <title>Important: Responsive Email Templates</title> 
</head> 
<body style="font-size:12px;" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> 
<?php include "html.html"; ?> 
</body> 
</html> 

回答

8

不要對用戶的輸入呼叫htmlentities()。這將所有的HTML特殊字符轉換爲實體,以便它們逐字顯示而不是被代替。舉例來說,如果用戶輸入:

<h3>header</h3> 

它會被轉換爲:

&lt;h3&gt;header&lt;/h3&gt; 
+0

真棒,就像一個魅力,謝謝!我也必須刪除造成不需要的stripslashes
。 – user3136345

+0

對。你應該幾乎發送它。如果用戶輸入想要保留的換行符,而不是像在普通的HTML源代碼中那樣合併到空格中,'nl2br'是唯一可能需要保留的內容。 – Barmar

+0

@Barmar很好的答案。嘿,對於300分,你對這個問題有什麼看法? http://stackoverflow.com/questions/42172228/is-this-how-an-mvc-router-class-typically-works –

0

試試這個:

<?php echo file_get_contents("html.html"); ?>