未声明HTML文档的字符编码


163

当我单击表单的提交按钮时,出现以下错误消息:

“未声明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;
 ?>

我不知道代码中的问题在哪里。请帮我。


3
一些不错的阅读:声明HTML中的字符编码
Pekka 2012年

尝试将.html页面命名为.php:insert.html-> insert.php。并命名您的表单处理文件(insert.phpinsert_action.php或类似名称。(如果它可以帮助不知道,但我不会混用htmlphp使用PHP网页时。)
ZZ-BB

哦,亲爱的,这是一个老问题。由于新的答案而没有注意到日期...
ZZ-bb,2012年

@xing,您使用的是哪种浏览器?
Pacerier,2015年

Answers:


279

将其添加为HTML模板的HEAD部分的第一行

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

6
第二行在W3验证程序中为docytype html产生此错误:Bad value encoding for attribute http-equiv on element meta.
yitwail 2013年

3
<meta http-equiv =“ Content-Type” content =“ text / html; charset = ISO-8859-1”>
Scott Stensland 2014年

2
@yitwail我只是排除了第二行,并且它起作用了。
Evorlor

1
我正在使用Firefox。我都输入了它们,现在页面上没有显示任何内容。我该怎么办?在此先感谢
Hendry Tanaka

1
我们中很少有人在UTF-8中键入文本文件。大多数文本文件均为ISO-8859-1格式。查看并查看您的文本编辑器正在生成什么,如果它是ISO-8859-1,则使用<meta http-equiv =“ Content-Type” content =“ text / html; charset = ISO-8859-1”>
AgilePro


18

好吧,当您发布内容时,浏览器只会输出$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>

1
谢谢,我遇到了类似的问题,您的回答帮助解决了这个问题(我错过了meta http-equiv ...行)。
David Miani 2012年

7

在Firefox中运行表单应用程序时,我遇到了同样的问题。添加<meta charset="utf-8"/>html代码解决了我在Firefox中的问题。

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>Voice clip upload</title>
  <script src="voiceclip.js"></script>
</head>

<body>
  <h2>Upload Voice Clip</h2>
  <form id="upload_form" enctype="multipart/form-data" method="post">
    <input type="file" name="file1" id="file1" onchange="uploadFile()"><br>
    <progress id="progressBar" value="0" max="100" style="width:300px;"></progress>
  </form>
</body>

</html>


3

您必须将文件从.html更改为.php。

并添加以下行

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

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>';

 ?>

真奇怪 您可以将代码发布为原始问题的补充吗?
gkrogers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.