Question

Comment puis-je savoir quel codage sera utilisé par PHP lors de l'envoi de données au navigateur? C'est à dire. avec l'en-tête Cotent-Type, par exemple: iso-8859-1.

Était-ce utile?

La solution

Généralement, les serveurs d’hébergeurs Web Apache + PHP sont configurés pour envoyer NON charset en-tête . Voici le moyen le plus rapide de tester la configuration de votre serveur:

  • Utilisez cet outil pour afficher l'en-tête du serveur en affichant l'une de vos pages sur votre site Web. . Si dans les en-têtes de serveur, vous voyez un <?php echo ini_get('default_charset'); ?> cela signifie que votre serveur l'utilise, il ne contient généralement pas de AddDefaultCharset some_charset.
  • Une autre méthode consiste à exécuter ce script simple sur votre serveur: <=> Comme indiqué ci-dessus, ceci affiche généralement une chaîne vide. S'il est différent, il affichera le <=> de PHP.

La deuxième solution suppose qu'Apache n'est pas configuré avec <=> ce qui n'est généralement pas le cas, mais dans ce cas, les paramètres Apache risquent de remplacer la directive PHP deafult_charset ini.

Autres conseils

Vous pouvez utiliser la solution header () suggérée par William. Toutefois, si vous utilisez Apache et que la configuration Apache utilise un jeu de caractères par défaut, il gagnera à chaque fois (Internet Explorer deviendra fou). Voir: AddDefaultCharset

N'oubliez pas que les types de contenu et les encodages sont deux choses différentes. text / html est un type de contenu; ISO-8859-1 et UTF-8 sont des codages.

L'en-tête de réponse HTTP envoyé par le serveur ressemble généralement à ceci:

Content-Type: text/html; charset=utf-8

& "; jeu de caractères &"; est en fait l'encodage des caractères. Ce n'est pas dans un en-tête séparé; Cependant, il existe un en-tête appelé & "Content-Encoding &"; qui spécifie en fait le type de compression utilisé par la réponse (par exemple, gzip).

Si vous souhaitez modifier le codage de caractères en UTF-8, dans un fichier contenant du code HTML:

<?
header("Content-Type: text/html; charset=utf-8");

Vous pouvez définir le vôtre avec header('Content-type: xxx/yyy');, mais je crois que text / html est envoyé par défaut.

Autant que je sache, PHP envoie des chaînes bytewise. c'est-à-dire que si vos variables contiennent UTF-8, il enverra UTF-8. si vous avez l'iso-8859-1, il l'enverra aussi. si vous les mélangez, ça ne sera pas joli.

Si votre serveur n'est pas configuré pour avoir un contenu ou un jeu de caractères par défaut, ni PHP, PHP n'enverra que Content-Type: text/html - il ne spécifiera aucun jeu de caractères et enverra les octets tels qu'il les verra dans le script.

Si un navigateur reçoit une page sans jeu de caractères, plusieurs événements peuvent se produire:

  • la plupart des navigateurs ont un " Encoding / Charset " menu; si l'utilisateur en choisit explicitement un, le navigateur essaiera de l'appliquer. Cela n'arrive pas souvent, alors:
  • certains navigateurs essaient de le restituer avec un jeu de caractères par défaut (dépendant des paramètres régionaux, par exemple pour FF et cs_CZ, il était iso-8859-2; YMMV)
  • IE essaiera de déterminer le jeu de caractères de manière heuristique (il faudra deviner, en fonction de la distribution des caractères - et souvent, cela échoue; parfois, cela se trompera et vous obtiendrez une page en roumain interprétée comme du texte chinois, qui signifie " illisible ")
  • certains anciens navigateurs vont se replier sur us-ascii

Si, avec cette procédure, le jeu de caractères du script PHP et celui du navigateur correspondent, le texte sera - par inadvertance - lisible. Sinon, il y aura des signes étranges et des phénomènes similaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top