Apache için varsayılan kodlamayı UTF-8 olarak nasıl değiştirebilirim?


138

Bir barındırma şirketi kullanıyorum ve dosya yoksa bir dizindeki dosyaları listeleyecektir index.html, varsayılan kodlama olarak iso-8859-1 kullanır.

Sunucu Apache ise, bunun yerine UTF-8'i varsayılan olarak ayarlamanın bir yolu var mı?

Güncelleme: Ayrıca aslında bir HTML 3.2 DOCTYPE kullandığını öğrendim ve sonra hiç charset yoktur ... bu yüzden herhangi bir kodlama ayarlamıyor. Ancak UTF-8 kullanacak şekilde değiştirmenin bir yolu var mı?

Yanıtlar:


176

Httpd.conf'da (veya zaten varsa değiştirin):

AddDefaultCharset utf-8

6
dosyada nerede bu herhangi bir yere ekler?
systemovich

5
@Geoffrey evet. zaten orada değilse, herhangi bir yere koyabilirsiniz. Ancak, ben genellikle "özel" yönergesi bir dizi nedenden dolayı dosyanın alt kısmında koymak (önceden mevcut yönergeleri, sipariş geçersiz kılmak, ve sadece kolayca ben kolayca stok yapılandırmadan ne değiştiğini görmek için).
MartinodF

6
AddDefaultCharset utf-8'i .htaccess'e ekle - benim için bir cazibe çalıştı. (httpd.conf'a erişiminiz yoksa)
richardwhitney

Büyük / küçük harfe duyarlı mı?
Mike Stoddart

6
Bu yanıt 2009'dan beri: Ubuntu 18'de, bu yapılandırmayı/etc/apache2/conf-available/charset.conf
WoodrowShigeru

55

Bunu şu adrese ekleyin .htaccess:

IndexOptions +Charset=UTF-8

Veya yönetici haklarına sahipseniz, bunu düzenleyip httpd.confekleyerek global olarak ayarlayabilirsiniz :

AddDefaultCharset UTF-8

(Kullanabilirsiniz AddDefaultCharsetyılında .htaccessda, ancak bir şekilde bu Apache tarafından oluşturulan dizin girişlerini etkilemez.)


4
Bu harika bir çözümdür ve httpd.conf dosyasını değiştirmekten daha az invazivdir.
Andrew Swift

1
sunucumda, .htaccesstüm alt dizinleri de etkileyebilir, muhtemelen apache herhangi bir .htaccessüst dizini web sitesi klasörünün kök dizinine kadar
arayacaktır

2
Evet, .htaccesstüm sunucularda böyle çalışır - tüm alt dizinleri de etkiler. Ancak, Apache tarafından oluşturulan dizin listeleme sayfaları .htaccess(AFAIK) kullanılarak UTF-8'e zorlanamaz .
Mathias Bynens

9
Lütfen dosyalar üzerinden sunucu genelinde ayarları değiştirmenin .htaccessgenellikle kötü bir uygulama olduğunu unutmayın. Sunucu ayarları çeşitli dosyalara dağıtıldığında hataları izlemek zorlaşır. Küçük bir performans isabeti de var: istenen her dosyada Apache dizinin .htaccessdosyasını ve .htaccessüst dizinlerin tüm dosyalarını okumalıdır . .htaccessbu nedenle yalnızca dizine özgü ayarlar için (örn. belirli bir dizine erişimi engelleme) veya yönetici hakları kazanma olasılığı kesinlikle olmadığında kullanılmalıdır.
Robbert

2
Up oy verdi, IndexOptions + Charset = UTF-8 benim için hile yaptı, teşekkürler!
mTorres

28

Bkz AddDefaultCharset Direktifi , AddCharset Direktifi ve bu yazıyı .

AddDefaultCharset utf-8

Ama ara sıra Çince karakterler kullanmalıyım. Daha önce, Çince karakterleri Unicode koduna &#çevirdim ve kesmek kullanarak belgeye ekledim. Ancak yalnızca birkaç karakter içeren sayfalar için kullanışlıdır.

Bunu yapmanın daha iyi bir yolu vardır: dosya adındaki karakter seti bilgilerini kodlayın ve apache buna göre uygun kodlama başlığını çıktılar. Bu, AddCharsetconf dosyasındaki aşağıdaki satır gibi satırlar sayesinde mümkündür :

conf/httpd.conf:

AddCharset UTF-8 .utf8

Dolayısıyla, adları biten bir dosyanız varsa .html.utf8, apache sayfayı UTF-8'de kodlanmış gibi sunacak ve başlığa uygun karakter kodlama yönergesini uygun şekilde dökecektir.


23

Yeri AddDefaultCharset UTF-8içine /etc/apache2/conf.d/charset. Aslında, zaten orada. Sadece bir öncekini kaldırarak bunu kaldırmanız gerekir #.


2
Diye bir dosya yok /etc/apache2/conf.d/charset. Dağıtımınıza göre özel bir içerme dosyasıdır. Diğer herhangi bir dosya gibi httpd.conf.
Evi1M4chine

1
Onun /etc/apache2/conf-enabled/charset.confbenim dağıtım (Ubuntu 16.4) .Ayrıca işe yaramadı.
Alator

23

.Htaccess içine şu satırı ekleyin:

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

Bu, sunucularının conf dosyasına erişimi olmayanlar içindir. Diğer denemeler başarısız olduğunda denemek için bir şey daha var.

.Htaccess kullanımı ile ilgili performans konularında bunu görmedim. Normal sayfa yükleme sürelerim .htaccess ile veya olmadan 150-200 mS

Sayfanız doğru bir şekilde oluşturulmuyorsa performans iyi olur. Çoğu paylaşılan sunucu, bir karakter kümesi eklemek için tercih edilen yer olan yapılandırma dosyasına kullanıcının erişmesine izin vermez.


Açıklayamıyorum, ama sadece bu çözüm benim için çalışıyor. Bu yüzden büyük bir +1
Skalár Wag

1
@Robbert tarafından daha önce de belirtildiği gibi - zaten .htaccessdosya kullanmıyorsanız , şimdi başlamayın. Bunun Kötü bir Fikir (tm) olmasının performans ve idari nedenleri vardır
Signal15

Uzantıları eklemediğinizde AddCharset, İçerik Türleri metin / html ve metin / düz öğelere uygulanır.
yanlış

Yukarıdaki tüm fahişeler didnt iken bu benim için çalıştı. +1
Alator

Kabul edilen cevap yalnızca tex / html ve text / plain'ı
TacoV

10

Apache yapılandırmasına (httpd.conf) erişiminiz olup olmadığından emin değilim ancak bir AddDefaultCharset Yönergesi ayarlayabilmeniz gerekir. Görmek:

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

Mod_mime.c modülünü arayın ve aşağıdakilerin ayarlandığından emin olun:

AddDefaultCharset utf-8 

veya eşdeğeri Apache 1.x belgeleri ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Ancak, bu yalnızca "yanıt içerik türü metin / düz veya metin / html" olduğunda işe yarar.

Ayrıca sayfalarınızda da bir karakter kümesi ayarlandığından emin olmalısınız. Daha fazla bilgi için buna bakın:

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


8

Bu test edilmemiştir, ancak muhtemelen işe yarayacaktır.

.Htaccess dosyanıza şunu koyun:

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

Ancak, bu sunucuda mod_headers gerektirir.


Bu benim için çalıştı, ancak seçilen çözüm işe yaramadı. Teşekkür ederim! Aslında, <Files>etiketlere sarmak zorunda bile kalmadım.
Geremia

8

Tamlık için, Ubuntu'daki Apache2'de, varsayılan karakter setini charset.conf içinde conf-conf'de bulabilirsiniz.

Hattı aç

AddDefaultCharset UTF-8

3

Tüm HTML dosyaları UTF-8'de ve içerik türü için meta etiketlere sahip olmadığında, yalnızca her iki yönerge ekleyerek Apache 2.4 tarafından gönderilecek bu dosyalar için gerekli varsayılanı ayarlayabildim:

AddLanguage ru .html
AddCharset UTF-8 .html

3

Sadece utf-8'de uzun dosya adlarınız varsa bir ipucu: varsayılan olarak 20 bayta kısaltılır, bu nedenle son karakter "yarı yarıya kesilebilir" ve bu nedenle düzgün şekilde tanınmayabilir. Ardından aşağıdakileri ayarlamak isteyebilirsiniz:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth ayarı, dosya adlarınızın kısalmasını engelleyerek düzgün görüntülenmesini ve okunmasını sağlar.

Daha önce de bahsettiğimiz diğer kullanıcıların belirttiği gibi, bu, httpd.confya apache2.conf(yönetici haklarınız varsa) ya da .htaccess(yoksa ) eklenmelidir .


2

Sadece boş bırakın: 'default_charset' in WHM :::::: default_charset =''

ps - WHM git --------) Ana Sayfa »Hizmet Konfigürasyonu» PHP Konfigürasyon Editörü ----) 'Gelişmiş Mod' ----) 'default_charset' bul ve boş bırak ---- sadece hiçbir şey, utf8 değil, ISO değil


0

Benim durumumda .htaccess'e ekle

AddDefaultCharset off
AddDefaultCharset windows-1252
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.