Le codage de caractères du document HTML n'a pas été déclaré

163

Lorsque je clique sur le bouton d'envoi de mon formulaire, le message d'erreur suivant apparaît:

"Le codage des caractères du document HTML n'a pas été déclaré. Le document sera rendu avec du texte déformé dans certaines configurations de navigateur si le document contient des caractères en dehors de la plage US-ASCII. Le codage des caractères de la page doit être déclaré dans le document ou dans le protocole de transfert. "

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

Je ne sais pas où est le problème dans mon code. Aidez-moi, s'il vous plaît.

xing
la source
3
Quelques bonnes lectures: Déclaration des encodages de caractères en HTML
Pekka
Essayez de nommer votre page .html en .php: insert.html-> insert.php. Et nommez votre fichier de gestion de formulaire ( insert.php) insert_action.phpou quelque chose comme ça. (Je ne sais pas si cela aide, mais je ne voudrais pas mélanger htmlet phppages lors de l'utilisation de PHP.)
ZZ-bb
Oh là là, c'était une vieille question. Je n'ai pas remarqué les dates à cause de la nouvelle réponse ...
ZZ-bb
@xing, quel navigateur utilisez-vous?
Pacerier

Réponses:

279

Ajoutez ceci en première ligne dans la section HEAD de votre modèle HTML

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
Krishan Gopal
la source
6
la deuxième ligne produit cette erreur dans le validateur W3 pour 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 J'ai juste exclu la deuxième ligne, et cela a fonctionné.
Evorlor
1
J'utilise Firefox. Je les ai tapés tous les deux et maintenant il ne me montre rien sur la page. Que devrais-je faire? Merci d'avance
Hendry Tanaka
1
Très peu d'entre nous saisissent des fichiers texte en UTF-8. La plupart des fichiers texte sont au format ISO-8859-1. Regardez et voyez ce que produit votre éditeur de texte, et si c'est ISO-8859-1, utilisez <meta http-equiv = "Content-Type" content = "text / html; charset = ISO-8859-1">
AgilePro
47

J'ai le même problème avec la situation la plus élémentaire et mon problème a été résolu en insérant cette méta dans la tête:

<meta charset="UTF-8">

le codage de caractères (qui est en fait UTF-8) du document html n'a pas été déclaré

Dragan Sekuloski
la source
18

Eh bien, lorsque vous publiez, le navigateur affiche uniquement $title- toutes vos balises HTML et doctype disparaissent. Vous devez les inclure dans votre insert.phpfichier:

<!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
la source
1
Merci, j'avais un problème similaire, et votre réponse a aidé à le résoudre (il me manquait la ligne meta http-equiv ...).
David Miani
7

J'ai eu le même problème lorsque j'ai exécuté mon application de formulaire dans Firefox. L'ajout <meta charset="utf-8"/>du code html a résolu mon problème dans 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
la source
3

Vous devez changer le fichier de .html en .php.

et ajoutez cette ligne suivante

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

Votre page initiale est une page HTML complète contenant un formulaire, dont le contenu est publié dans insert.php lorsque le bouton d'envoi est cliqué, mais insert.php doit traiter le contenu du formulaire et faire quelque chose avec lui, comme l'ajouter à un base de données, ou les afficher sur une nouvelle page. Votre insert.php actuel affiche simplement le contenu du champ de titre, donc votre navigateur essaie de l'interpréter comme une page HTML, et échoue, évidemment, car ce n'est pas du HTML valide (c'est-à-dire qu'il n'est pas contenu dans un 'HTML' tag, etc.).

Votre insert.php doit générer le code HTML nécessaire et insérer les données du formulaire quelque part.

Par exemple:

<?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
la source
C'est étrange. Pouvez-vous publier votre code en complément de la question initiale?
gkrogers