Kodowanie znaków dokumentu HTML nie zostało zadeklarowane

163

Po kliknięciu przycisku przesyłania mojego formularza pojawia się następujący komunikat o błędzie:

„Kodowanie znaków dokumentu HTML nie zostało zadeklarowane. W niektórych konfiguracjach przeglądarki dokument będzie renderowany z zniekształconym tekstem, jeśli dokument zawiera znaki spoza zakresu US-ASCII. Kodowanie znaków na stronie musi być zadeklarowane w dokumencie lub w protokole transmisji. "

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

Nie wiem, gdzie jest problem w moim kodzie. Proszę pomóż mi.

xing
źródło
3
Dobra lektura: Deklarowanie kodowania znaków w HTML
Pekka
Spróbuj nazwać swoją stronę .html na .php: insert.html-> insert.php. I nazwij plik obsługi formularza ( insert.php) na insert_action.phpczy coś. (Nie jestem pewien, czy to pomaga, ale nie mieszałbym htmli phpstron podczas korzystania z PHP.)
ZZ-bb
Ojej, to było stare pytanie. Nie zauważyłem dat z powodu nowej odpowiedzi ...
ZZ-bb
@xing, jakiej przeglądarki używasz?
Pacerier

Odpowiedzi:

279

Dodaj to jako pierwszą linię w sekcji HEAD szablonu HTML

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
Krishan Gopal
źródło
6
druga linia generuje ten błąd w walidatorze W3 dla docytype html:Bad value encoding for attribute http-equiv on element meta.
yitwail
3
<meta http-equiv = "Content-Type" content = "text / html; charset = ISO-8859-1">
Scott Stensland
2
@yitwail Właśnie wykluczyłem drugą linię i zadziałało.
Evorlor
1
Używam Firefoxa. Wpisałem oba i teraz nic mi nie jest na stronie. Co powinienem zrobić? Z góry dziękuję
Hendry Tanaka,
1
Bardzo niewielu z nas pisze pliki tekstowe w UTF-8. Większość plików tekstowych ma format ISO-8859-1. Zobacz i zobacz, co tworzy Twój edytor tekstu, a jeśli jest to ISO-8859-1, użyj <meta http-equiv = "Content-Type" content = "text / html; charset = ISO-8859-1">
AgilePro
46

Mam ten sam problem z najbardziej podstawową sytuacją i mój problem został rozwiązany poprzez wstawienie tej meta do głowy:

<meta charset="UTF-8">

kodowanie znaków (w rzeczywistości jest to UTF-8) dokumentu HTML nie zostało zadeklarowane

Dragan Sekuloski
źródło
18

Kiedy publikujesz, przeglądarka tylko wyświetla $title- wszystkie tagi HTML i typ dokumentu znikają. Musisz uwzględnić je w swoim insert.phppliku:

<!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
źródło
1
Dzięki, miałem podobny problem, a Twoja odpowiedź pomogła go rozwiązać (brakowało mi linii meta http-equiv ...).
David Miani
7

Miałem ten sam problem, gdy uruchomiłem aplikację formularza w przeglądarce Firefox. Dodanie <meta charset="utf-8"/>kodu html rozwiązało mój problem w przeglądarce 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
źródło
3

Musisz zmienić plik z .html na .php.

i dodaj następujący wiersz

header('Content-Type: text/html; charset=utf-8');
Renjith VR
źródło
1

Twoja strona początkowa to kompletna strona HTML zawierająca formularz, którego zawartość jest umieszczana w pliku insert.php po kliknięciu przycisku przesyłania, ale insert.php musi przetworzyć zawartość formularza i coś z nimi zrobić, np. Dodać je do bazy danych lub wyślij je na nową stronę. Twój obecny plik insert.php po prostu wyświetla zawartość pola tytułu, więc twoja przeglądarka próbuje zinterpretować to jako stronę HTML, ale oczywiście kończy się to niepowodzeniem, ponieważ nie jest to poprawny HTML (tj. Nie jest zawarty w 'HTML' tag itp.).

Twój insert.php musi wypisać niezbędny kod HTML i gdzieś wstawić dane formularza.

Na przykład:

<?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
źródło
To dziwne. Czy możesz opublikować swój kod jako dodatek do pierwotnego pytania?
gkrogers