2012-08-16 25 views
106

當我點擊我的表單的提交按鈕會出現以下錯誤信息:HTML文檔的字符編碼未聲明

「的HTML文檔的字符編碼未聲明的文件將與亂碼的文字渲染在某些瀏覽器配置中,如果文檔包含US-ASCII範圍之外的字符,則頁面的字符編碼必須在文檔或傳輸協議中聲明。

insert.html:

<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>insert page</title></head> 
<body> 
<h1> Insert Page </h1> 
    <form action="insert.php" method="post" enctype="application/x-www-form-urlencoded" > 
    <p>Title:<input type="text" name="title" size="40"/></p> 
    <p>Price:<input type= "text" name="price" size="40" /></p> 
    <p><input type="submit" value="Insert" /> 
    <input type="reset" value="Reset" /></p> 
    </form>  
</body> 
</html> 

insert.php:

<?php 
    $title = $_POST["title"]; 
    $price = $_POST["price"]; 

    echo $title; 
?> 

我不知道哪裏是我的代碼的問題。請幫幫我。

+2

一些好的閱讀:[在HTML中聲明的字符編碼(http://www.w3.org/International/questions/qa-html-encoding-declarations) – 2012-08-16 22:21:03

+0

嘗試將您的.html頁面命名爲.php:'insert.html' - >'insert.php'。並將你的表單處理文件('insert.php')命名爲'insert_action.php'或其他東西。 (不知道它是否有幫助,但在使用PHP時,我不會混合'html'和'php'頁面。) – 2012-10-10 13:07:48

+0

哦,親愛的,這是一個老問題。沒有注意到日期,因爲新的答案... – 2012-10-10 13:10:08

回答

15

當您發佈時,瀏覽器僅輸出$title - 您的所有HTML標籤和doctype都會消失。您需要包括那些在您insert.php文件:

<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>insert page</title></head> 
<body> 
<?php 

    $title = $_POST["title"]; 
    $price = $_POST["price"]; 

    echo $title; 


?> 
</body> 
</html> 
+0

我已包含但沒有顯示任何內容 – xing 2012-08-17 01:56:08

+1

謝謝,我有一個類似的問題,並且你的答案幫助解決了它(我錯過了meta http-equiv ...行)。 – 2012-08-19 02:48:26

1

您最初的網頁是含有形成完整的HTML頁面,其內容發佈到insert.php當按鈕被點擊提交,但insert.php需要處理表單的內容並對其執行某些操作,例如將其添加到數據庫,或將它們輸出到新頁面。你當前的insert.php只是輸出title字段的內容,所以你的瀏覽器試圖把它解釋爲一個HTML頁面,並且顯然失敗了,因爲它不是有效的HTML(即它不包含在'HTML'標籤等)。

您的insert.php需要輸出必要的HTML,並將表單數據插入到某處。

例如:

<?php 

    $title = $_POST["title"]; 
    $price = $_POST["price"]; 

    echo '<html xmlns="http://www.w3.org/1999/xhtml">'; 
    echo '<head>'; 
    echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'; 
    echo '<title>'; 
    echo $title; 
    echo '</title>'; 
    echo '</head>'; 
    echo '<body>'; 
    echo 'Hello, world.'; 
    echo '</body>'; 

?> 
+1

我試過這段代碼,但它顯示'echo'作爲輸出。 – xing 2012-08-17 02:17:51

+0

這很奇怪。您可以將您的代碼作爲原始問題的補充嗎? – gkrogers 2012-08-19 23:16:00

189

添加爲你的HTML模板的HEAD部分的第一線

<meta content="text/html;charset=utf-8" http-equiv="Content-Type"> 
<meta content="utf-8" http-equiv="encoding"> 
+5

第二行在W3驗證器中爲docytype html產生了此錯誤: '元素meta上的屬性http-equiv的錯誤值編碼。 – yitwail 2013-09-28 00:38:40

+3

2014-10-28 21:18:04

+2

@yitwail我只是排除了第二行,它工作。 – Evorlor 2014-11-28 14:29:05

22

我有同樣的問題,最基本的情況,我的問題與解決在頭部插入這個元:

<meta charset="UTF-8"> 

字符編碼(它實際上是UTF-8)的html文件沒有聲明

2

您必須將文件從.html更改爲.php。

,並添加此以下行

header('Content-Type: text/html; charset=utf-8');