Jak zmienić domyślne kodowanie na UTF-8 dla Apache?

138

Korzystam z firmy hostingowej i wyświetli listę plików w katalogu, jeśli pliku index.htmltam nie ma, używa standardowego kodowania iso-8859-1.

Jeśli serwer to Apache, czy można zamiast tego ustawić UTF-8 jako domyślny?

Aktualizacja: Dodatkowo dowiedziałem się, że faktycznie używa DOCTYPE w HTML 3.2, a potem w ogóle nie ma zestawu znaków ... więc nie ustawia żadnego kodowania. Ale czy istnieje sposób, aby to zmienić, aby używać UTF-8?

brak biegunowości
źródło

Odpowiedzi:

176

W httpd.conf dodaj (lub zmień, jeśli już tam jest):

AddDefaultCharset utf-8
MartinodF
źródło
6
gdzie w pliku można to dodać, gdziekolwiek?
systemovich
5
@Geoffrey yes. jeśli jeszcze go tam nie ma, możesz go umieścić w dowolnym miejscu. jednakże zwykle umieszczam każdą „niestandardową” dyrektywę na dole pliku z wielu powodów (nadpisanie wcześniej istniejących dyrektyw, kolejność i po prostu po to, aby łatwo zobaczyć, co zmieniłem w konfiguracji standardowej).
MartinodF
6
Dodaj AddDefaultCharset utf-8 do .htaccess - zadziałał dla mnie urok. (jeśli nie masz dostępu do httpd.conf)
richardwhitney,
Czy rozróżniana jest wielkość liter?
Mike Stoddart
6
Ponieważ ta odpowiedź pochodzi z 2009 roku: w Ubuntu 18 zmieniasz tę konfigurację w/etc/apache2/conf-available/charset.conf
WoodrowShigeru
55

Dodaj to do .htaccess:

IndexOptions +Charset=UTF-8

Lub, jeśli masz uprawnienia administratora, możesz ustawić je globalnie, edytując httpd.confi dodając:

AddDefaultCharset UTF-8

(Możesz też użyć AddDefaultCharsetin .htaccess, ale nie wpłynie to w ten sposób na listy katalogów generowane przez Apache).

Mathias Bynens
źródło
4
To świetne rozwiązanie i mniej inwazyjne niż modyfikowanie pliku httpd.conf.
Andrew Swift
1
na moim serwerze .htaccessmoże mieć wpływ również na wszystkie podkatalogi, prawdopodobnie Apache będzie szukał dowolnego .htaccesskatalogu nadrzędnego aż do katalogu głównego folderu witryny
nonopolarity
2
Tak, tak .htaccessdziała na wszystkich serwerach - wpływa to również na wszystkie podkatalogi. Jednak stron z listą katalogów generowanych przez Apache nie można wymusić na UTF-8 przy użyciu .htaccess(AFAIK).
Mathias Bynens,
9
Należy pamiętać, że zmiana ustawień całego serwera za pośrednictwem .htaccessplików jest ogólnie złą praktyką. Błędy stają się trudniejsze do śledzenia, gdy ustawienia serwera są rozmieszczone w różnych plikach. Występuje również niewielki spadek wydajności: przy każdym żądanym pliku Apache musi odczytać .htaccessplik katalogu i wszystkie .htaccesspliki katalogów nadrzędnych. .htaccessdlatego powinny być używane tylko do ustawień specyficznych dla katalogu (np. uniemożliwianie dostępu do określonego katalogu) lub wtedy, gdy nie ma absolutnie możliwości uzyskania uprawnień administratora.
Robbert,
2
Głosowano w górę, IndexOptions + Charset = UTF-8 załatwił sprawę za mnie, dzięki!
mTorres
28

Zobacz dyrektywę AddDefaultCharset , dyrektywę AddCharset , a ten artykuł .

AddDefaultCharset utf-8

Ale od czasu do czasu muszę używać chińskich znaków. Wcześniej przetłumaczyłem chińskie znaki na kod Unicode i umieściłem go w dokumencie za pomocą &#hacka. Ale jest to przydatne tylko w przypadku strony zawierającej kilka znaków.

Jest na to lepszy sposób: zakoduj informacje o zestawie znaków w nazwie pliku, a apache wyświetli na tej podstawie odpowiedni nagłówek kodowania. Jest to możliwe dzięki AddCharsetwierszom w pliku conf, takim jak wiersz poniżej:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Więc jeśli masz plik, którego nazwy kończą się na .html.utf8, Apache wyświetli stronę tak, jakby była zakodowana w UTF-8 i odpowiednio zrzuci odpowiednią dyrektywę kodowania znaków w nagłówku.

Eugene Yokota
źródło
23

Umieść AddDefaultCharset UTF-8w /etc/apache2/conf.d/charset. W rzeczywistości już tam jest. Musisz tylko usunąć komentarz, usuwając poprzedni #.

Bjartur Thorlacius
źródło
2
Nie ma takiego pliku jak /etc/apache2/conf.d/charset. Jest to niestandardowy plik dołączany przez twoją dystrybucję. Jak każdy inny plik, który nie jest httpd.conf.
Evi1M4chine
1
Jest /etc/apache2/conf-enabled/charset.confna mojej dystrybucji (Ubuntu 16.4). Również nie działał.
Alator
23

W .htaccess dodaj tę linię:

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

To jest dla tych, którzy nie mają dostępu do pliku konfiguracyjnego swojego serwera. To jeszcze jedna rzecz, którą należy spróbować, gdy inne próby zawiodły.

Jeśli chodzi o problemy z wydajnością dotyczące korzystania z .htaccess, nie widziałem tego. Moje typowe czasy ładowania strony to 150-200 ms z lub bez .htaccess

Jaka jest korzyść z wydajności, jeśli Twoja strona nie renderuje się poprawnie. Większość serwerów współdzielonych nie zezwala użytkownikom na dostęp do pliku konfiguracyjnego, który jest preferowanym miejscem dodawania zestawu znaków.

Niezrozumiany
źródło
Nie umiem wyjaśnić, ale tylko to rozwiązanie działa dla mnie. Dlatego duże +1
Skalár Wag
1
Jak wspomniał wcześniej @Robbert - jeśli jeszcze nie używasz .htaccessplików, nie zaczynaj teraz. Istnieją powody wydajnościowe i administracyjne, dla których jest to zły pomysł (tm)
Signal15
Jeśli nie uwzględnisz rozszerzeń, AddCharset zostanie zastosowany do typów zawartości text / html i text / plain.
Niezrozumiany
To zadziałało dla mnie, podczas gdy wszystkie powyższe awnsery nie. +1
Alator
Zaakceptowana odpowiedź dotyczy tylko tex / html i text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV
10

Nie jestem pewien, czy masz dostęp do konfiguracji Apache (httpd.conf), ale powinieneś móc ustawić dyrektywę AddDefaultCharset. Widzieć:

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

Poszukaj modułu mod_mime.c i upewnij się, że ustawiono:

AddDefaultCharset utf-8 

lub równoważne dokumenty Apache 1.x ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Jednak działa to tylko wtedy, gdy „typ zawartości odpowiedzi to tekst / zwykły lub tekst / html”.

Powinieneś także upewnić się, że Twoje strony również mają ustawiony zestaw znaków. Zobacz to, aby uzyskać więcej informacji:

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

Jon
źródło
8

To nie jest testowane, ale prawdopodobnie zadziała.

W swoim pliku .htaccess umieść:

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

Będzie to jednak wymagało mod_headers na serwerze.

MiffTheFox
źródło
U mnie to zadziałało, podczas gdy wybrane rozwiązanie nie. Dziękuję Ci! W rzeczywistości nie musiałem nawet zawijać go w <Files>metki.
Geremia
8

Dla kompletności, w Apache2 na Ubuntu, domyślny zestaw znaków znajdziesz w charset.conf w conf-available.

Odkomentuj linię

AddDefaultCharset UTF-8
David Glance
źródło
3

Tam, gdzie wszystkie pliki HTML są w UTF-8 i nie mają metatagów dla typu zawartości, mogłem tylko ustawić wymagane domyślne, aby te pliki były wysyłane przez Apache 2.4, dodając obie dyrektywy:

AddLanguage ru .html
AddCharset UTF-8 .html
Alex
źródło
3

Tylko wskazówka, jeśli masz długie nazwy plików w utf-8: domyślnie zostaną one skrócone do 20 bajtów, więc może się zdarzyć, że ostatni znak zostanie „przecięty na pół” i przez to nie zostanie poprawnie rozpoznany. Następnie możesz ustawić następujące opcje:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth ustawienie zapobiegnie skracaniu nazw plików, dzięki czemu będą poprawnie wyświetlane i czytelne.

Jak już wspominali inni użytkownicy, należy to dodać w httpd.conflub apache2.conf(jeśli masz uprawnienia administratora) lub w .htaccess(jeśli nie masz).

pstryk
źródło
2

Po prostu zostaw to puste: 'default_charset' in WHM :::::: default_charset =''

ps - W WHM go --------) Strona główna »Konfiguracja usługi» Edytor konfiguracji PHP ----) kliknij „Tryb zaawansowany” ----) znajdź „default_charset” i pozostaw go pustym ---- po prostu nic, nie utf8, nie ISO

rosnąć
źródło
0

W moim przypadku dodaj do .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
Rusłana Nowikowa
źródło