Wie ändere ich die Standardcodierung für Apache in UTF-8?

138

Ich verwende ein Hosting-Unternehmen und es listet die Dateien in einem Verzeichnis auf, wenn die Datei index.htmlnicht vorhanden ist. Es verwendet ISO-8859-1 als Standardcodierung.

Wenn der Server Apache ist, gibt es eine Möglichkeit, stattdessen UTF-8 als Standard festzulegen?

Update: Außerdem habe ich herausgefunden, dass tatsächlich ein DOCTYPE von HTML 3.2 verwendet wird und es dann überhaupt keinen Zeichensatz gibt ... also wird keine Codierung festgelegt. Aber gibt es eine Möglichkeit, UTF-8 zu verwenden?

Unpolarität
quelle

Antworten:

176

In httpd.conf hinzufügen (oder ändern, wenn es bereits vorhanden ist):

AddDefaultCharset utf-8
MartinodF
quelle
6
Wo in der Datei fügt man das irgendwo hinzu?
Systemovich
5
@ Geoffrey ja. Wenn es noch nicht vorhanden ist, können Sie es überall platzieren. Normalerweise füge ich jedoch aus einer Reihe von Gründen jede "benutzerdefinierte" Direktive am Ende der Datei ein (Überschreiben bereits vorhandener Direktiven, Reihenfolge und nur um leicht zu sehen, was ich gegenüber der Standardkonfiguration geändert habe).
MartinodF
6
AddDefaultCharset utf-8 zu .htaccess hinzufügen - hat mir sehr gut gefallen. (wenn Sie keinen Zugriff auf httpd.conf haben)
richardwhitney
Ist es case sensitive?
Mike Stoddart
6
Da diese Antwort aus dem Jahr 2009 stammt: In Ubuntu 18 ändern Sie diese Konfiguration in/etc/apache2/conf-available/charset.conf
WoodrowShigeru
55

Fügen Sie dies zu Ihrem hinzu .htaccess:

IndexOptions +Charset=UTF-8

Wenn Sie über Administratorrechte verfügen, können Sie diese global festlegen, indem Sie Folgendes bearbeiten httpd.confund hinzufügen:

AddDefaultCharset UTF-8

(Sie können auch AddDefaultCharsetin verwenden .htaccess, dies hat jedoch keine Auswirkungen auf von Apache generierte Verzeichnislisten.)

Mathias Bynens
quelle
4
Dies ist eine großartige Lösung und weniger invasiv als das Ändern der Datei httpd.conf.
Andrew Swift
1
Auf meinem Server .htaccesskann dies auch alle Unterverzeichnisse betreffen. Wahrscheinlich sucht Apache nach .htaccessdem übergeordneten Verzeichnis bis zum Stammverzeichnis des Website-Ordners
Nonopolarity
2
Ja, so .htaccessfunktioniert das auf allen Servern - es betrifft auch alle Unterverzeichnisse. Von Apache generierte Verzeichnislisten-Seiten können jedoch nicht mithilfe von .htaccess(AFAIK) zu UTF-8 gezwungen werden .
Mathias Bynens
9
Bitte beachten Sie, dass das Ändern der serverweiten Einstellungen über .htaccessDateien im Allgemeinen eine schlechte Praxis ist. Es wird schwieriger, Fehler zu verfolgen, wenn die Servereinstellungen auf verschiedene Dateien verteilt sind. Es gibt auch einen leichten Leistungseinbruch: Bei jeder angeforderten Datei muss Apache die .htaccessDatei des Verzeichnisses und alle .htaccessDateien der übergeordneten Verzeichnisse lesen . .htaccesssollte daher nur für verzeichnisspezifische Einstellungen verwendet werden (z. B. Verhindern des Zugriffs auf ein bestimmtes Verzeichnis) oder wenn absolut keine Möglichkeit besteht, Administratorrechte zu erlangen.
Robbert
2
Nach oben gewählt, haben die IndexOptions + Charset = UTF-8 den Trick für mich getan, danke!
mTorres
28

Siehe AddDefaultCharset-Direktive , AddCharset-Direktive und diesen Artikel .

AddDefaultCharset utf-8

Aber ich muss ab und zu chinesische Schriftzeichen verwenden. Zuvor habe ich chinesische Schriftzeichen in Unicode-Code übersetzt und ihn mithilfe des &#Hacks in das Dokument aufgenommen . Es ist jedoch nur für Seiten mit wenigen Zeichen nützlich.

Es gibt einen besseren Weg, dies zu tun: Codieren Sie die Zeichensatzinformationen im Dateinamen, und Apache gibt darauf basierend den richtigen Codierungsheader aus. Dies ist möglich dank der AddCharsetZeilen in der conf-Datei, wie z. B. der folgenden Zeile:

conf/httpd.conf::

AddCharset UTF-8 .utf8

Wenn Sie also eine Datei haben, deren Namen auf enden .html.utf8, wird Apache die Seite so bedienen, als ob sie in UTF-8 codiert wäre, und die entsprechende Zeichencodierungsanweisung entsprechend in den Header kopieren.

Eugene Yokota
quelle
23

Platzieren AddDefaultCharset UTF-8in /etc/apache2/conf.d/charset. Tatsächlich ist es schon da. Sie müssen es nur auskommentieren, indem Sie das vorhergehende entfernen #.

Bjartur Thorlacius
quelle
2
Es gibt keine Datei wie /etc/apache2/conf.d/charset. Es ist eine benutzerdefinierte Include-Datei Ihrer Distribution. Wie jede andere Datei, die nicht ist httpd.conf.
Evi1M4chine
1
Es ist /etc/apache2/conf-enabled/charset.confauf meiner Distribution (Ubuntu 16.4). Auch hat nicht funktioniert.
Alator
23

Fügen Sie in .htaccess diese Zeile hinzu:

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

Dies ist für diejenigen gedacht, die keinen Zugriff auf die conf-Datei ihres Servers haben. Es ist nur noch eine Sache zu versuchen, wenn andere Versuche fehlgeschlagen sind.

Was Leistungsprobleme bei der Verwendung von .htaccess betrifft, habe ich dies nicht gesehen. Meine typischen Ladezeiten für Seiten sind 150-200 ms mit oder ohne .htaccess

Was nützt die Leistung, wenn Ihre Seite nicht richtig gerendert wird? Die meisten gemeinsam genutzten Server erlauben dem Benutzer keinen Zugriff auf die Konfigurationsdatei, die der bevorzugte Ort zum Hinzufügen eines Zeichensatzes ist.

Falsch verstanden
quelle
Ich kann es nicht erklären, aber nur diese Lösung funktioniert für mich. Deshalb eine große +1
Skalár Wag
1
Wie bereits von @Robbert erwähnt - wenn Sie noch keine .htaccessDateien verwenden, starten Sie jetzt nicht. Es gibt Leistungs- und Verwaltungsgründe, warum dies eine schlechte Idee (tm) ist
Signal15
Wenn Sie die Erweiterungen nicht einschließen, wird AddCharset auf die Inhaltstypen text / html und text / plain angewendet.
Missverstanden
Dies funktionierte für mich, während alle oben genannten Markisen dies nicht taten. +1
Alator
Die akzeptierte Antwort betrifft nur tex / html und text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV
10

Ich bin nicht sicher, ob Sie Zugriff auf die Apache-Konfiguration (httpd.conf) haben, aber Sie sollten in der Lage sein, eine AddDefaultCharset-Direktive festzulegen. Sehen:

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

Suchen Sie nach dem Modul mod_mime.c und stellen Sie sicher, dass Folgendes festgelegt ist:

AddDefaultCharset utf-8 

oder die entsprechenden Apache 1.x-Dokumente ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Dies funktioniert jedoch nur, wenn "der Inhaltstyp der Antwort text / plain oder text / html ist".

Sie sollten auch sicherstellen, dass auf Ihren Seiten auch ein Zeichensatz festgelegt ist. Weitere Informationen finden Sie hier:

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

Jon
quelle
8

Dies ist ungetestet, wird aber wahrscheinlich funktionieren.

Fügen Sie in Ihre .htaccess-Datei Folgendes ein:

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

Dies erfordert jedoch mod_headers auf dem Server.

MiffTheFox
quelle
Das hat bei mir funktioniert, die gewählte Lösung jedoch nicht. Danke dir! Tatsächlich musste ich es nicht einmal in <Files>Tags einwickeln .
Geremia
8

Der Vollständigkeit halber finden Sie unter Apache2 unter Ubuntu den Standardzeichensatz in charset.conf in conf-available.

Kommentieren Sie die Zeile aus

AddDefaultCharset UTF-8
David Glance
quelle
3

Da sich alle HTML-Dateien in UTF-8 befinden und keine Meta-Tags für den Inhaltstyp haben, konnte ich nur den erforderlichen Standard für das Senden dieser Dateien durch Apache 2.4 festlegen, indem ich beide Anweisungen hinzufügte:

AddLanguage ru .html
AddCharset UTF-8 .html
Alex
quelle
3

Nur ein Hinweis, wenn Sie in utf-8 lange Dateinamen haben: Standardmäßig werden diese auf 20 Byte gekürzt, sodass es vorkommen kann, dass das letzte Zeichen "halbiert" und daher nicht richtig erkannt wird. Dann möchten Sie möglicherweise Folgendes einstellen:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth Durch die Einstellung wird verhindert, dass Ihre Dateinamen gekürzt werden, sodass sie ordnungsgemäß angezeigt und lesbar sind.

Wie andere Benutzer bereits erwähnt haben, sollte dies entweder in httpd.confoder apache2.conf(wenn Sie Administratorrechte haben) oder in .htaccess(wenn Sie dies nicht tun) hinzugefügt werden .

pstryk
quelle
2

Lass es einfach leer: 'default_charset' in WHM :::::: default_charset =''

ps - In WHM gehen Sie --------) Startseite »Dienstkonfiguration» PHP-Konfigurationseditor ----) Klicken Sie auf 'Erweiterter Modus' ----) Suchen Sie 'default_charset' und lassen Sie es leer ---- nur nichts, nicht utf8, nicht ISO

grrow
quelle
0

In meinem Fall zu .htaccess hinzufügen

AddDefaultCharset off
AddDefaultCharset windows-1252
Ruslan Novikov
quelle