Maison  >  Article  >  développement back-end  >  Explication détaillée de la méthode de déclaration d'encodage de page PHP (en-tête ou méta)

Explication détaillée de la méthode de déclaration d'encodage de page PHP (en-tête ou méta)

高洛峰
高洛峰original
2017-01-21 14:02:101016parcourir

en-tête php pour définir une page php comme encodage utf ou encodage GBK

page php comme encodage utf
header("Content-type: text/html; charset=utf-8"); 🎜>
La page php est encodée en gbk
header("Content-type: text/html; charset=gb2312");

La page php est encodée en big5
header("Content - tapez : text/html; charset=big5");

Habituellement, le code ci-dessus est placé sur la page d'accueil de la page php

La différence entre utiliser un en-tête ou une méta pour implémenter l'encodage de page PHP
1. Encodage de page

1. Utilisez la balise >
La fonction de cette balise est de déclarer le jeu de caractères utilisé par le navigateur du client pour afficher la page xxx. Il peut être GB2312, GBK, UTF-8 (différent de MySQL, qui est UTF8), etc. Par conséquent, la plupart des pages peuvent utiliser cette méthode pour indiquer au navigateur quel encodage utiliser lors de l'affichage de cette page, afin d'éviter les erreurs d'encodage et les caractères tronqués. Mais parfois, nous constaterons que cette phrase ne fonctionne toujours pas. Quel que soit le nom de xxx, le navigateur utilise toujours le même codage. Je reviendrai sur cette situation plus tard.

Veuillez noter que appartient aux informations HTML et n'est qu'une déclaration. Cela indique que le serveur a transmis les informations HTML au navigateur.

2. header("content-type:text/html; charset=xxx");

La fonction de cette fonction header() est d'envoyer les informations entre parenthèses au http. en-tête.

Si le contenu entre parenthèses est tel que mentionné dans l'article, la fonction est fondamentalement la même que la balise . Mais la différence est que s’il existe cette fonction, le navigateur utilisera toujours l’encodage xxx que vous avez demandé et ne désobéira jamais, cette fonction est donc très utile. Pourquoi cela se produit-il ? Ensuite, nous devons parler de la différence entre l'en-tête HTTPS et les informations HTML :

L'en-tête https est une chaîne envoyée par le serveur avant d'envoyer les informations HTML au navigateur via le protocole HTTP.

Étant donné que la balise méta appartient aux informations HTML, le contenu envoyé par header() atteint le navigateur en premier. Le point populaire est que header() a une priorité plus élevée que meta (je ne sais pas si cela peut être le cas). soit dit). Ajoutez une page php contenant à la fois header("content-type:text/html; charset=xxx") et le navigateur ne reconnaîtra que l'ancien en-tête http et non la méta. Bien entendu, cette fonction ne peut être utilisée qu’au sein des pages PHP.

Il reste également une question : pourquoi le premier fonctionne-t-il définitivement, mais le second ne fonctionne parfois pas ? C'est pourquoi nous voulons ensuite parler d'Apache.

3. AddDefaultCharset

Dans le dossier conf du répertoire racine d'Apache, se trouve l'intégralité du document de configuration d'Apache httpd.conf.

Ouvrez httpd.conf avec un éditeur de texte. La ligne 708 (peut être différente selon les versions) contient AddDefaultCharset xxx, où xxx est le nom d'encodage. La signification de cette ligne de code : définissez le jeu de caractères dans l'en-tête https du fichier de page Web sur l'ensemble du serveur sur votre jeu de caractères xxx par défaut. Avoir cette ligne équivaut à ajouter un en-tête ("content-type: text/html; charset=xxx") à chaque fichier. Vous pouvez maintenant comprendre pourquoi le navigateur utilise toujours gb2312 même si le paramètre méta est utf-8.

S'il y a un en-tête("content-type:text/html; charset=xxx") dans la page Web, le jeu de caractères par défaut sera remplacé par le jeu de caractères que vous avez défini, donc cette fonction sera toujours être utile. Si vous ajoutez un "#" devant AddDefaultCharset xxx, commentez cette phrase et que la page ne contient pas d'en-tête ("content-type..."), alors c'est au tour de la balise méta de prendre effet.

Résumé :

Trions

header("content-type:text/html; charset=xxx")
AddDefaultCharset xxx

Si vous êtes un programmeur web, ajoutez un en-tête("content-type:text/ html; charset=xxx"), garantissant qu'il peut être affiché correctement sur n'importe quel serveur et qu'il a une forte portabilité.

Quant à la phrase AddDefaultCharset xxx, qu'elle doive être commentée ou non est une question d'opinion. Quoi qu'il en soit, je l'ai commenté, mais je dois aussi écrire header() lors de l'écriture d'une page, afin qu'elle puisse être affichée normalement sur le serveur.

2. Encodage de la base de données

Avant d'interroger la base de données, le programme PHP exécute d'abord mysql_query("SET NAMES xxxx"); où xxxx est l'encodage de votre page Web (charset=xxxx). Si la page Web charset=utf8, alors xxxx=utf8. Si charset=gb2312 dans la page Web, alors xxxx=gb2312 ont un code commun pour se connecter à la base de données, qui est placé dans un fichier. fichier, ajoutez mysql_query(" set names") fera l'affaire.

SET NAMES Affiche le jeu de caractères utilisé dans les instructions SQL envoyées par le client. Par conséquent, l'instruction SET NAMES 'utf-8' indique au serveur que « les futures informations de ce client utiliseront le jeu de caractères utf-8 ». Il spécifie également le jeu de caractères pour les résultats que le serveur renvoie au client. (Par exemple, si vous utilisez une instruction SELECT, elle indique quel jeu de caractères est utilisé pour la valeur de la colonne.)

L'encodage des pages PHP est unifié

Encodage de la base de données MySQL, encodage des pages HTML, PHP ou le fichier HTML lui-même. Le codage doit être cohérent dans l'ensemble.
1. Encodage de la base de données MySQL : spécifiez l'encodage (tel que gbk_chinese_ci) lors de la création de la base de données. Ne spécifiez pas l'encodage lors de la création de tables de données, de la création de champs et de l'insertion de données. L'encodage de la base de données sera automatiquement hérité.
Lors de la connexion à la base de données, il y a également un encodage. Après la connexion à la base de données, exécutez
mysql_query('SET NAMES gbk'); //Remplacez gbk par votre encodage, tel que utf8.

2. L'encodage de la page html fait référence au paramétrage de cette ligne :

3. L'encodage du fichier PHP ou html lui-même : Utilisez editplus pour ouvrir le fichier php ou le fichier html Lors de l'enregistrement, sélectionnez l'encodage de la base de données et de la page gbk, sélectionnez ansi pour le. encodage ici ; si l'encodage de la base de données et de la page est L'encodage de la page est utf-8, alors sélectionnez utf-8 ici.

4. Une autre chose à noter est que les données transmises en Javascript ou Flash sont codées en utf-8. Si l'encodage de la base de données et de la page est gbk, il doit être transcodé puis écrit dans la base de données.
iconv('utf-8', 'gbk', $content);

5. Dans le programme PHP, vous pouvez ajouter une ligne pour spécifier l'encodage du programme source PHP :
header( 'Content-type: text/html; charset=gbk');

Pour des explications plus détaillées sur les méthodes de déclaration d'encodage de page PHP (en-tête ou méta), veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn