web-dev-qa-db-fra.com

Définissez l'en-tête HTTP sur UTF-8 à l'aide de PHP

J'ai plusieurs PHP pages faisant écho à diverses choses dans HTML pages avec le code suivant.

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

Cependant, lorsque je valide avec le validateur W3C , il se présente comme suit:

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 assez nouveau en PHP et je me demandais si je pouvais et devais modifier l'en-tête des fichiers PHP pour qu'ils correspondent aux fichiers HTML.

301
manycheese

Utilisez header pour modifier l'en-tête HTTP:

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

Remarque pour appeler cette fonction avant que toute 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 le page de manuel de header pour plus d'informations.

865
Gumbo

Tout d’abord, assurez-vous que les fichiers PHP sont eux-mêmes TF-8 encodés.

La balise META est ignorée par certains navigateurs. Si vous n'utilisez que des caractères ASCII, cela n'a pas d'importance.

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

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

Ceci est un problème avec votre serveur Web qui envoie un en-tête HTTP qui ne correspond pas à celui que vous avez défini. Pour savoir comment faire en sorte que le serveur envoie les en-têtes appropriés, voir cette page .

Sinon, vous pouvez également utiliser PHP pour modifier les en-têtes, mais cela doit être fait avant de générer du texte à l'aide de ce code:

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

Vous trouverez plus d'informations sur l'envoi d'en-têtes à l'aide de PHP dans la documentation relative à la fonction d'en-tête .

15
EdoDodo

Vous pouvez également utiliser un moyen plus court:

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

Voir RFC 2616 c'est valide pour ne spécifier que le jeu de caractères.

11
Jason OOO

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

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
8
UnChien Andalou

PHP envoie les en-têtes automatiquement si le codage interne est configuré

ini_set('default_charset', 'utf-8');
5
Nikl