Bagaimana cara mengubah pengkodean default ke UTF-8 untuk Apache?

139

Saya menggunakan perusahaan hosting dan akan mencantumkan file di direktori jika file index.htmltidak ada, menggunakan iso-8859-1 sebagai pengkodean default.

Jika servernya Apache, apakah ada cara untuk menyetel UTF-8 sebagai default?

Pembaruan: Selain itu saya menemukan bahwa itu sebenarnya menggunakan DOCTYPE HTML 3.2 dan kemudian tidak ada charset sama sekali ... jadi itu tidak mengatur pengkodean apa pun. Tetapi apakah ada cara untuk mengubahnya untuk menggunakan UTF-8?

nonopolaritas
sumber

Jawaban:

178

Di httpd.conf tambahkan (atau ubah jika sudah ada):

AddDefaultCharset utf-8
MartinodF
sumber
6
di mana dalam file seseorang menambahkan ini, di mana saja?
systemovich
5
@Yaelahcan. jika belum ada, Anda bisa meletakkannya di mana saja. Namun, saya biasanya meletakkan setiap arahan "kustom" di bagian bawah file karena sejumlah alasan (mengesampingkan arahan yang sudah ada sebelumnya, memesan, dan hanya untuk dengan mudah melihat apa yang saya ubah dari konfigurasi stok).
MartinodF
6
Tambahkan AddDefaultCharset utf-8 ke .htaccess - sangat bermanfaat bagi saya. (jika Anda tidak memiliki akses ke httpd.conf)
richardwhitney
Apakah peka huruf besar / kecil?
Mike Stoddart
7
Karena jawaban ini dari 2009: di Ubuntu 18, Anda mengubah konfigurasi ini di/etc/apache2/conf-available/charset.conf
WoodrowShigeru
56

Tambahkan ini ke Anda .htaccess:

IndexOptions +Charset=UTF-8

Atau, jika Anda memiliki hak administrator, Anda dapat mengaturnya secara global dengan mengedit httpd.confdan menambahkan:

AddDefaultCharset UTF-8

(Anda dapat menggunakan AddDefaultCharsetdi .htaccessjuga, tapi itu tidak akan mempengaruhi daftar direktori Apache dihasilkan seperti itu.)

Mathias Bynens
sumber
4
Ini adalah solusi yang bagus dan tidak terlalu invasif daripada memodifikasi file httpd.conf.
Andrew Swift
1
di server saya, .htaccessdapat mempengaruhi semua subdirektori juga, mungkin apache akan mencari .htaccessdirektori induk sampai ke direktori root folder situs web
nonopolarity
2
Ya, begitulah cara .htaccesskerjanya di semua server - ini juga memengaruhi semua subdirektori. Namun, halaman daftar direktori yang dibuat oleh Apache tidak dapat dipaksa ke UTF-8 dengan menggunakan .htaccess(AFAIK).
Mathias Bynens
9
Harap dicatat, mengubah pengaturan seluruh server melalui .htaccessfile umumnya merupakan praktik yang buruk. Bug menjadi lebih sulit untuk dilacak ketika pengaturan server didistribusikan ke berbagai file. Ada sedikit penurunan kinerja juga: dengan setiap file yang diminta, Apache harus membaca file direktori .htaccessdan semua .htaccessfile dari direktori induk. .htaccessOleh karena itu, sebaiknya hanya digunakan untuk pengaturan spesifik direktori (misalnya, mencegah akses ke direktori tertentu) atau ketika sama sekali tidak ada kemungkinan untuk mendapatkan hak administrator.
Robbert
2
Atas voting, IndexOptions + Charset = UTF-8 berhasil untuk saya, terima kasih!
mTorres
28

Lihat Petunjuk AddDefaultCharset , Petunjuk AddCharset , dan artikel ini .

AddDefaultCharset utf-8

Tapi saya harus menggunakan karakter Cina sekarang dan nanti. Sebelumnya, saya menerjemahkan karakter Cina ke kode Unicode dan memasukkannya ke dalam dokumen menggunakan &#peretasan. Tetapi ini hanya berguna untuk halaman yang memiliki beberapa karakter.

Ada cara yang lebih baik untuk melakukannya: menyandikan informasi charset dalam nama file, dan apache akan mengeluarkan header penyandian yang tepat berdasarkan itu. Ini dimungkinkan berkat AddCharsetbaris di file conf, seperti baris di bawah ini:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Jadi, jika Anda memiliki file yang namanya diakhiri .html.utf8, apache akan menyajikan halaman seolah-olah dikodekan dalam UTF-8 dan akan membuang direktif pengkodean karakter yang sesuai di header yang sesuai.

Eugene Yokota
sumber
23

Tempatkan AddDefaultCharset UTF-8ke /etc/apache2/conf.d/charset. Nyatanya, itu sudah ada. Anda hanya perlu menghapusnya dengan menghapus sebelumnya #.

Bjartur Thorlacius
sumber
2
Tidak ada file seperti /etc/apache2/conf.d/charset. Ini adalah file penyertaan khusus oleh distribusi Anda. Seperti halnya file lain yang tidak httpd.conf.
Evi1M4chine
1
Ini ada /etc/apache2/conf-enabled/charset.confdi distribusi saya (Ubuntu 16.4). Juga tidak berfungsi.
Alator
23

Di .htaccess tambahkan baris ini:

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

Ini untuk mereka yang tidak memiliki akses ke file conf server mereka. Ini hanya satu hal lagi untuk dicoba ketika upaya lain gagal.

Sejauh masalah kinerja terkait penggunaan .htaccess, saya belum melihat ini. Waktu muat halaman saya biasanya adalah 150-200 mS dengan atau tanpa .htaccess

Apa gunanya kinerja jika halaman Anda tidak ditampilkan dengan benar. Sebagian besar server bersama tidak mengizinkan akses pengguna ke file konfigurasi yang merupakan tempat pilihan untuk menambahkan rangkaian karakter.

Disalahpahami
sumber
Saya tidak bisa menjelaskan, tetapi hanya solusi ini yang berhasil untuk saya. Itulah mengapa +1 besar
Skalár Wag
1
Seperti yang disebutkan oleh @Robbert sebelumnya - jika Anda belum menggunakan .htaccessfile, jangan mulai sekarang. Ada alasan kinerja & administratif mengapa ini adalah Ide Buruk (tm)
Signal15
Jika Anda tidak menyertakan ekstensi, AddCharset diterapkan ke Jenis Konten teks / html dan teks / biasa.
Disalahpahami pada
Ini bekerja untuk saya sementara semua awnser di atas tidak. +1
Alator
Jawaban yang diterima hanya memengaruhi tex / html dan teks / biasa: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV
11

Saya tidak yakin apakah Anda memiliki akses ke konfigurasi Apache (httpd.conf) tetapi Anda harus dapat menetapkan Petunjuk AddDefaultCharset. Lihat:

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

Cari modul mod_mime.c dan pastikan yang berikut ini disetel:

AddDefaultCharset utf-8 

atau dokumen Apache 1.x yang setara ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Namun, ini hanya berfungsi jika "jenis konten respons adalah teks / biasa atau teks / html".

Anda juga harus memastikan bahwa halaman Anda memiliki set karakter juga. Lihat ini untuk info lebih lanjut:

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

Jon
sumber
8

Ini belum teruji tetapi mungkin akan berhasil.

Di file .htaccess Anda, letakkan:

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

Namun, ini akan membutuhkan mod_headers di server.

MiffTheFox
sumber
Itu berhasil untuk saya, sedangkan solusi yang dipilih tidak. Terima kasih! Nyatanya, saya bahkan tidak perlu membungkusnya dengan <Files>label.
Geremia
8

Untuk kelengkapannya, pada Apache2 di Ubuntu, Anda akan menemukan charset default di charset.conf di conf-available.

Batalkan komentar pada baris tersebut

AddDefaultCharset UTF-8
David Glance
sumber
3

Di mana semua file HTML dalam UTF-8 dan tidak memiliki tag meta untuk tipe konten, saya hanya dapat mengatur default yang diperlukan untuk file-file ini untuk dikirim oleh Apache 2.4 dengan menambahkan kedua arahan:

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

Sebagai petunjuk jika Anda memiliki nama file yang panjang di utf-8: secara default nama tersebut akan disingkat menjadi 20 byte, jadi mungkin saja karakter terakhir mungkin "dipotong menjadi dua" dan oleh karena itu tidak dikenali dengan benar. Kemudian Anda mungkin ingin mengatur yang berikut ini:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth pengaturan akan mencegah pemendekan nama file Anda, membuatnya ditampilkan dengan benar dan dapat dibaca.

Seperti yang telah disebutkan pengguna lain, ini harus ditambahkan di httpd.confatau apache2.conf(jika Anda memiliki hak admin) atau di .htaccess(jika tidak).

pstryk
sumber
2

Biarkan kosong: 'default_charset' in WHM :::::: default_charset =''

ps - Dalam WHM go --------) Beranda »Konfigurasi Layanan» Editor Konfigurasi PHP ----) klik 'Advanced Mode' ----) temukan 'default_charset' dan biarkan kosong ---- cukup bukan apa-apa, bukan utf8, bukan ISO

grrow
sumber
1

<meta charset = 'utf-8'> menimpa charset default apache ( cf /etc/apache2/conf.d/charset )

Jika ini tidak cukup, maka Anda mungkin membuat file asli Anda dengan kumpulan karakter encoding iso-8859-1 . Anda harus mengubahnya menjadi set karakter yang tepat:

iconv -f ISO-8859-1 -t UTF-8 source_file.php -o new file.php
Orang bodoh
sumber
0

Dalam kasus saya, tambahkan ke .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
Ruslan Novikov
sumber