Comment changer l'encodage par défaut en UTF-8 pour Apache?


138

J'utilise une société d'hébergement et il listera les fichiers dans un répertoire si le fichier index.htmln'est pas là, il utilise iso-8859-1 comme encodage par défaut.

Si le serveur est Apache, existe-t-il un moyen de définir UTF-8 comme valeur par défaut?

Mise à jour: De plus, j'ai découvert qu'il utilise en fait un DOCTYPE de HTML 3.2 et qu'il n'y a pas de jeu de caractères du tout ... donc il ne définit aucun encodage. Mais y a-t-il un moyen de le changer pour utiliser UTF-8?

Réponses:


176

Dans httpd.conf, ajoutez (ou changez si c'est déjà là):

AddDefaultCharset utf-8

6
où dans le fichier ajoute-t-on cela, n'importe où?
systemovich

5
@ Geoffrey oui. s'il n'est pas déjà là, vous pouvez le mettre n'importe où. cependant, je mets généralement chaque directive "personnalisée" au bas du fichier pour un certain nombre de raisons (outrepasser les directives préexistantes, l'ordre, et juste pour voir facilement ce que j'ai fait changer de la configuration de stock).
MartinodF

6
Ajouter AddDefaultCharset utf-8 à .htaccess - a fonctionné un charme pour moi. (si vous n'avez pas accès à httpd.conf)
richardwhitney

Est-ce sensible à la casse?
Mike Stoddart

6
Puisque cette réponse date de 2009: dans Ubuntu 18, vous modifiez cette configuration dans/etc/apache2/conf-available/charset.conf
WoodrowShigeru

55

Ajoutez ceci à votre .htaccess:

IndexOptions +Charset=UTF-8

Ou, si vous avez des droits d'administrateur, vous pouvez le définir globalement en modifiant httpd.confet en ajoutant:

AddDefaultCharset UTF-8

(Vous pouvez également utiliser AddDefaultCharsetdans .htaccess, mais cela n'affectera pas les listes de répertoires générées par Apache de cette façon.)


4
C'est une excellente solution et moins invasive que la modification du fichier httpd.conf.
Andrew Swift

1
sur mon serveur, le .htaccesspeut également affecter tous les sous-répertoires, probablement apache recherchera tout .htaccessle répertoire parent jusqu'au répertoire racine du dossier du site Web
nonopolarité

2
Oui, c'est ainsi que .htaccessfonctionne sur tous les serveurs - cela affecte également tous les sous-répertoires. Cependant, les pages de liste de répertoires générées par Apache ne peuvent pas être forcées à UTF-8 à l'aide de .htaccess(AFAIK).
Mathias Bynens

9
Veuillez noter que la modification des paramètres du serveur via des .htaccessfichiers est généralement une mauvaise pratique. Les bogues deviennent plus difficiles à suivre lorsque les paramètres du serveur sont répartis sur divers fichiers. Il y a aussi un léger impact sur les performances: avec chaque fichier demandé, Apache doit lire le .htaccessfichier du répertoire et tous les .htaccessfichiers des répertoires parents. .htaccessne doit donc être utilisé que pour les paramètres spécifiques du répertoire (par exemple, empêcher l'accès à un répertoire spécifique) ou lorsqu'il n'y a absolument aucune possibilité d'obtenir des droits d'administrateur.
Robbert

2
Voté, l'IndexOptions + Charset = UTF-8 a fait l'affaire pour moi, merci!
mTorres le

28

Voir la directive AddDefaultCharset , la directive AddCharset , et cet article .

AddDefaultCharset utf-8

Mais je dois utiliser des caractères chinois de temps en temps. Auparavant, je traduisais les caractères chinois en code Unicode et je les incluais dans le document à l'aide du &#hack. Mais cela n'est utile que pour les pages comportant quelques caractères.

Il y a une meilleure façon de faire cela: encoder les informations du jeu de caractères dans le nom de fichier, et apache affichera l'en-tête de codage approprié en fonction de cela. Ceci est possible grâce aux AddCharsetlignes du fichier conf, comme la ligne ci-dessous:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Donc, si vous avez un fichier dont le nom se termine par .html.utf8, apache servira la page comme s'il était encodé en UTF-8 et videra la directive de codage de caractères appropriée dans l'en-tête en conséquence.


23

Placer AddDefaultCharset UTF-8dans /etc/apache2/conf.d/charset. En fait, c'est déjà là. Il vous suffit de le décommenter en supprimant le précédent #.


2
Il n'existe pas de fichier tel que /etc/apache2/conf.d/charset. Il s'agit d'un fichier d'inclusion personnalisé par votre distribution. Comme tout autre fichier qui ne l'est pas httpd.conf.
Evi1M4chine

1
C'est /etc/apache2/conf-enabled/charset.confsur ma distribution (Ubuntu 16.4) .Aussi n'a pas fonctionné.
Alator

23

Dans .htaccess, ajoutez cette ligne:

AddCharset utf-8 .html .css .php .txt .js

C'est pour ceux qui n'ont pas accès au fichier de configuration de leur serveur. C'est juste une chose de plus à essayer lorsque d'autres tentatives ont échoué.

En ce qui concerne les problèmes de performances concernant l'utilisation de .htaccess, je n'ai pas vu cela. Mes temps de chargement de page typiques sont de 150 à 200 ms avec ou sans .htaccess

À quoi servent les performances si votre page ne s'affiche pas correctement. La plupart des serveurs partagés n'autorisent pas l'accès des utilisateurs au fichier de configuration, qui est l'emplacement préféré pour ajouter un jeu de caractères.


Je ne peux pas expliquer, mais seule cette solution fonctionne pour moi. C'est pourquoi un gros +1
Skalár Wag

1
Comme mentionné par @Robbert plus tôt - si vous n'utilisez pas déjà des .htaccessfichiers, ne commencez pas maintenant. Il y a des raisons de performance et d'administration pour lesquelles c'est une mauvaise idée (tm)
Signal15

Lorsque vous n'incluez pas les extensions, AddCharset est appliqué aux types de contenu text / html et text / plain.
mal compris le

Cela a fonctionné pour moi alors que tous les awnsers ci-dessus n'ont pas fonctionné. +1
Alator

La réponse acceptée n'affecte que tex / html et text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV

10

Je ne sais pas si vous avez accès à la configuration Apache (httpd.conf) mais vous devriez pouvoir définir une directive AddDefaultCharset. Voir:

http://httpd.apache.org/docs/2.0/mod/core.html

Recherchez le module mod_mime.c et assurez-vous que ce qui suit est défini:

AddDefaultCharset utf-8 

ou la documentation Apache 1.x équivalente ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Cependant, cela ne fonctionne que lorsque "le type de contenu de la réponse est text / plain ou text / html".

Vous devez également vous assurer que vos pages ont également un jeu de caractères. Voir ceci pour plus d'informations:

http://www.w3.org/TR/REC-html40/charset.html


8

Ceci n'a pas été testé mais fonctionnera probablement.

Dans votre fichier .htaccess, mettez:

<Files ~ "\.html?$">  
     Header set Content-Type "text/html; charset=utf-8"
</Files>

Cependant, cela nécessitera des mod_headers sur le serveur.


Cela a fonctionné pour moi, contrairement à la solution choisie. Je vous remercie! En fait, je n'ai même pas eu à l'envelopper dans des <Files>balises.
Geremia

8

Pour être complet, sur Apache2 sur Ubuntu, vous trouverez le jeu de caractères par défaut dans charset.conf dans conf-available.

Décommentez la ligne

AddDefaultCharset UTF-8

3

Là où tous les fichiers HTML sont en UTF-8 et n'ont pas de balises méta pour le type de contenu, je n'ai pu définir la valeur par défaut nécessaire pour que ces fichiers soient envoyés par Apache 2.4 en ajoutant les deux directives:

AddLanguage ru .html
AddCharset UTF-8 .html

3

Juste un indice si vous avez des noms de fichiers longs dans utf-8: par défaut, ils seront raccourcis à 20 octets, il peut donc arriver que le dernier caractère soit "coupé en deux" et donc non reconnu correctement. Ensuite, vous souhaiterez peut-être définir les paramètres suivants:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth Le réglage empêchera de raccourcir les noms de vos fichiers, les rendant ainsi correctement affichés et lisibles.

Comme d'autres utilisateurs l'ont déjà mentionné, cela devrait être ajouté dans httpd.confou apache2.conf(si vous avez des droits d'administrateur) ou dans .htaccess(si vous ne l'avez pas).


2

Laissez-le vide: 'default_charset' in WHM :::::: default_charset =''

ps - Dans WHM aller --------) Accueil »Configuration du service» Éditeur de configuration PHP ----) cliquez sur 'Mode avancé' ----) recherchez 'default_charset' et laissez-le vide ---- juste rien, pas utf8, pas ISO


0

Dans mon cas, ajoutez à .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.