Кодировка символов документа 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
Попробуйте назвать свою .html страницу как .php: insert.html-> insert.php. И назовите файл обработки формы ( insert.php) insert_action.phpили что-то еще. (Не уверен, что это поможет, но я не буду смешивать htmlи phpстраницы при использовании PHP.)
ZZ-bb
О, дорогой, это был старый вопрос. Не заметил даты из-за нового ответа ...
ZZ-bb
@xing, какой браузер вы используете?
Пейсер

Ответы:

279

Добавьте это в качестве первой строки в разделе HEAD вашего HTML-шаблона.

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
Кришан Гопал
источник
6
вторая строка выдает эту ошибку в валидаторе W3 для html docytype:Bad value encoding for attribute http-equiv on element meta.
yitwail
3
<meta http-equ = "Content-Type" content = "text / html; charset = ISO-8859-1">
Скотт Стенсланд
2
@yitwail Я только что исключил вторую строку, и это сработало.
Evorlor
1
Я использую Firefox. Я напечатал их обоих, и теперь это ничего не показывает мне на странице. Что я должен делать? Заранее спасибо
Хендри Танака
1
Очень немногие из нас печатают текстовые файлы в UTF-8. Большинство текстовых файлов в формате ISO-8859-1. Посмотрите, что производит ваш текстовый редактор, и если это ISO-8859-1, используйте <meta http-экв = "Content-Type" content = "text / html; charset = ISO-8859-1">
AgilePro
47

У меня та же проблема с самой основной ситуацией, и моя проблема была решена с помощью вставки этой мета в голову:

<meta charset="UTF-8">

кодировка символов (которая на самом деле является UTF-8) HTML-документа не была объявлена

Драган Секулоски
источник
18

Хорошо, когда вы $titleпубликуете , браузер только выводит - все ваши HTML-теги и тип документа исчезают. Вы должны включить их в свой 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>
AlienWebguy
источник
1
Спасибо, у меня была похожая проблема, и ваш ответ помог исправить ее (я пропустил строку meta http-эквивалент ...).
Дэвид Миани
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 просто выводит содержимое поля заголовка, поэтому ваш браузер пытается интерпретировать это как 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
источник
Странно. Можете ли вы опубликовать свой код в качестве дополнения к первоначальному вопросу?
gkrogers