A codificação de caracteres do documento HTML não foi declarada

163

Quando clico no botão Enviar do meu formulário, a seguinte mensagem de erro é exibida:

"A codificação de caracteres do documento HTML não foi declarada. O documento será renderizado com texto ilegível em algumas configurações do navegador se o documento contiver caracteres fora do intervalo ASCII dos EUA. A codificação de caracteres da página deve ser declarada no documento ou no protocolo de transferência ".

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

Não sei onde está o problema no meu código. Por favor me ajude.

xing
fonte
Tente nomear sua página .html como .php: insert.html-> insert.php. E nomeie seu arquivo de manipulação de formulário ( insert.php) insert_action.phpou algo assim. (Não tenho certeza se isso ajuda, mas eu não iria misturar htmle phppáginas quando usando PHP.)
ZZ-bb
Oh, querida, essa era uma pergunta antiga. Não percebeu as datas por causa da nova resposta ...
ZZ-bb
@ xing, qual navegador você está usando?
Pacerier

Respostas:

278

Adicione isso como uma primeira linha na seção HEAD do seu modelo HTML

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
Krishan Gopal
fonte
6
segunda linha produz esse erro no validador W3 para docytype html:Bad value encoding for attribute http-equiv on element meta.
yitwail 28/09
3
<meta http-equiv = "Tipo de conteúdo" content = "text / html; charset = ISO-8859-1">
Scott Stensland
2
@yitwail Acabei de excluir a segunda linha, e funcionou.
Evorlor
1
Estou usando o Firefox. Digitei os dois e agora ele não mostra nada na página. O que devo fazer? Agradecemos antecipadamente
Hendry Tanaka
1
Muito poucos de nós digitam arquivos de texto em UTF-8. A maioria dos arquivos de texto está no formato ISO-8859-1. Veja e veja o que o seu editor de texto está produzindo e, se for ISO-8859-1, use <meta http-equiv = "Tipo de conteúdo" content = "text / html; charset = ISO-8859-1">
AgilePro
46

Eu tenho o mesmo problema com a situação mais básica e meu problema foi resolvido com a inserção dessa meta na cabeça:

<meta charset="UTF-8">

a codificação de caracteres (que na verdade é UTF-8) do documento html não foi declarada

Dragan Sekuloski
fonte
18

Bem, quando você publica, o navegador apenas gera $title- todas as suas tags e doctype HTML desaparecem. Você precisa incluir aqueles em seu insert.phparquivo:

<!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>
AlienWebguy
fonte
1
Obrigado, eu estava tendo um problema semelhante, e sua resposta ajudou a corrigi-lo (estava faltando a meta http-equiv ... line).
David Miani
7

Eu tive o mesmo problema ao executar meu aplicativo de formulário no Firefox. A adição <meta charset="utf-8"/>do código html resolveu meu problema no 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>

Ishara Amarasekera
fonte
3

Você precisa alterar o arquivo de .html para .php.

e adicione esta seguinte linha

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

Sua página inicial é uma página HTML completa que contém um formulário, cujo conteúdo é publicado em insert.php quando o botão Enviar é clicado, mas o insert.php precisa processar o conteúdo do formulário e fazer algo com ele, como adicioná-lo a um banco de dados ou produza-os em uma nova página. Seu insert.php atual apenas gera o conteúdo do campo de título, então seu navegador tenta interpretá-lo como uma página HTML e falha, obviamente, porque não é um HTML válido (ou seja, não está contido em um 'HTML' etiqueta etc.).

Seu insert.php precisa gerar o HTML necessário e inserir os dados do formulário em algum lugar.

Por exemplo:

<?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
fonte
Isso é estranho. Você pode postar seu código como uma adição à pergunta original?
precisa saber é o seguinte