Définir L'en-tête HTTP à UTF-8 en utilisant PHP

j'ai plusieurs PHP les pages de l'écho de diverses choses dans HTML pages avec le code suivant.

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

Cependant, quand j'ai valider à l'aide de la validateur du W3C elle vient avec:

le codage de caractères spécifié dans L'en-tête HTTP (iso-8859-1) est différent de la valeur de l'élément (utf-8).

Je suis tout à fait nouveau à PHP, et je me demandais si je pouvais et devrais changer l'en-tête pour les fichiers PHP pour correspondre aux fichiers HTML.

290
demandé sur Peter Mortensen 2010-11-25 19:50:25
la source

6 ответов

utiliser header pour modifier L'en-tête HTTP:

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

Note pour appeler cette fonction avant qu'une sortie ait été envoyée au client. Sinon, l'en-tête a été envoyé aussi et vous ne pouvez évidemment plus le changer. Vous pouvez vérifier cela avec headers_sent . Voir la page de manuel de header pour plus d'informations.

827
répondu Gumbo 2010-11-25 19:52:19
la source

assurez-vous D'abord que les fichiers PHP eux-mêmes sont UTF-8 encodés.

la balise meta est ignorée par un navigateur. Si vous n'utilisez que des caractères ASCII, peu importe.

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

header('Content-Type: text/html; charset=utf-8');
30
répondu KingCrunch 2014-04-12 23:38:41
la source

il s'agit d'un problème lorsque votre serveur web envoie un en-tête HTTP qui ne correspond pas à celui que vous avez défini. Pour des instructions sur la façon de faire le serveur envoyer les en-têtes corrects voir cette page .

sinon, vous pouvez également utiliser PHP pour modifier les en-têtes, mais cela doit être fait avant sortie de tout texte en utilisant ce code:

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

plus d'informations sur la façon d'envoyer des en-têtes en utilisant PHP peut être trouvé dans la documentation pour la fonction d'en-tête .

14
répondu EdoDodo 2010-11-25 19:54:16
la source

vous pouvez aussi utiliser shorter way:

<?php header('Content-Type: charset=utf-8'); ?>

Voir RFC 2616 la validité de son spécifier le charset.

10
répondu Jason OOO 2014-03-18 20:53:29
la source

pour une mise en œuvre correcte, vous devez changer une série de choses.

de la Base de données.(immédiatement après la connexion):

mysql_query("SET NAMES utf8");
//Meta tag HTML.(probably its already set): 
meta charset="utf-8"
header php.(before any output of the HTML):
header('Content-Type: text/html; charset=utf-8')
table-rows-charset(for each row):
utf8_unicode_ci
7
répondu UnChien Andalou 2015-10-07 19:52:17
la source

PHP envoyer des en-têtes automatiquement si mis en place l'encodage interne

ini_set('default_charset', 'utf-8');
3
répondu Nikl 2017-09-11 10:04:00
la source

Autres questions sur php html http-headers