353 votes

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

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

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

Cependant, quand j'ai valider à l'aide du validateur du W3C il est livré avec:

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

Je suis tout à fait nouveau pour le PHP, et je me demandais si je pourrais et devrais modifier l'en-tête pour les fichiers PHP pour correspondre à la forme de fichiers HTML.

952voto

Gumbo Points 279147

Utiliser header de modifier l'en-tête HTTP:

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

Note pour appeler cette fonction avant toute sortie a été envoyée au client. Sinon, la tête a été envoyé trop et de toute évidence vous ne pouvez pas la modifier. Vous pouvez le vérifier avec headers_sent. Voir la page de manuel de header pour plus d'informations.

35voto

KingCrunch Points 45168

Assurez-vous d'abord, les fichiers PHP sont eux-mêmes UTF-8 codé.

La balise meta est ignoré par certains navigateurs. Si vous utilisez uniquement des caractères ASCII, il n'a pas d'importance de toute façon.

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

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

16voto

EdoDodo Points 5480

C'est un problème avec votre serveur web, l'envoi d'un en-tête HTTP qui ne correspond pas à ce que vous définissez. Pour obtenir des instructions sur la façon de rendre le serveur envoie le bon en-têtes de voir cette page.

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

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

Plus d'informations sur la façon d'envoyer des en-têtes à l'aide de PHP peuvent être trouvés dans la documentation de l'en-tête de la fonction.

13voto

Jason OOO Points 1641

Vous pouvez également utiliser de façon plus simple:

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

Voir la RFC 2616 son valable uniquement spécifier le charset.

11voto

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

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

mysql_query("SET NAMES utf8");

La balise Meta HTML.(probablement déjà fait):

meta charset="utf-8"

l'en-tête php.(avant toute sortie HTML):

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

table-lignes-jeu de caractères(pour chaque ligne):

utf8_unicode_ci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X