{{tag>webadmin apache php charset caractères}}
====== Problèmes d'affichage de caractères ======
L'agent (navigateur Web) utilise un algorithme pour déterminer quel encodage de caractère doit être utilisé pour restituer correctement la ressource de type texte transmise via HTTP par le serveur web. L'algorithme tient compte notamment:
* De l'attribut **Content-Type** dans l' entête de la réponse HTTP.
* De la balise **** du document HTML.
Pour des documents HTML, la bonne pratique consiste à systématiquement:
* Définir la balise et à préciser le jeux de caractères du document via l'attribut charset.
* Utiliser préférentiellement le jeu de caractère UTF-8.
Il est possible de modifier la configuration du serveur Apache pour qu'il modifie les entete
* Forcer la valeur de l'attribut Content-Type
===== Scripts PHP =====
Si la ressource est un script PHP, le moteur PHP se chargeant de interprétation (module apache ou serveur php-fpm) peut modifier le header HTML et spécifier un encodage en fonction sa configuration par défaut (php.ini)
Le problème a été rencontré lors du portage d'anciens scripts sur un serveur récent. Les scripts PHP utilisaient le charset ISO-8859-1 mais le serveur PHP-FPM était configuré pour utiliser par défaut le jeu de caractères UTF-8 (via le fichier /etc/php/5.6/fpm/php.ini). Lors de l’exécution des scripts l’entête de la réponse HTTP était modifiée par le serveur PHP-FPM qui forçait la valeur de Content-Type:
Content-Type: text/html; charset=UTF-8
Le jeu de caractère UTF-8 était alors utilisé par l'agent en lieu et place du jeu de caractère correct ISO-8859-1.
===== Références =====
* https://developer.mozilla.org/fr/docs/Web/HTML/Element/meta
* https://httpd.apache.org/docs/2.4/fr/mod/mod_charset_lite.html
* https://unix.stackexchange.com/questions/141470/adddefaultcharset-iso-8859-1-not-work