Làm cách nào để thay đổi mã hóa mặc định thành UTF-8 cho Apache?


138

Tôi đang sử dụng một công ty lưu trữ và nó sẽ liệt kê các tệp trong một thư mục nếu tệp index.htmlkhông có ở đó, nó sử dụng iso-8859-1 làm mã hóa mặc định.

Nếu máy chủ là Apache, có cách nào để đặt UTF-8 làm mặc định không?

Cập nhật: Ngoài ra, tôi phát hiện ra rằng nó thực sự đang sử dụng DOCTYPE của HTML 3.2 và sau đó không có bộ ký tự nào cả ... vì vậy nó không đặt bất kỳ mã hóa nào. Nhưng có cách nào để thay đổi nó để sử dụng UTF-8 không?

Câu trả lời:


176

Trong httpd.conf thêm (hoặc thay đổi nếu nó đã có):

AddDefaultCharset utf-8

6
người ta thêm cái này vào đâu, ở đâu?
systemovich

5
@Geoffrey vâng. nếu nó chưa ở đó, bạn có thể đặt nó ở bất cứ đâu. tuy nhiên, tôi thường đặt mọi chỉ thị "tùy chỉnh" ở dưới cùng của tệp vì một số lý do (ghi đè các chỉ thị, đơn đặt hàng trước đó và chỉ để dễ dàng xem những gì tôi đã thay đổi từ stock config).
MartinodF

6
Thêm AddDefaultCharset utf-8 vào .htaccess - đã làm tôi say mê. (nếu bạn không có quyền truy cập vào httpd.conf)
richardwhitney

Là trường hợp nhạy cảm?
Mike Stoddart

6
Vì câu trả lời này là từ năm 2009: trong Ubuntu 18, bạn thay đổi cấu hình này trong/etc/apache2/conf-available/charset.conf
WoodrowShigeru

55

Thêm phần này vào .htaccess:

IndexOptions +Charset=UTF-8

Hoặc, nếu bạn có quyền quản trị viên, bạn có thể đặt nó trên toàn cầu bằng cách chỉnh sửa httpd.confvà thêm:

AddDefaultCharset UTF-8

(Bạn có thể sử dụng AddDefaultCharsettrong .htaccessquá, nhưng nó sẽ không ảnh hưởng đến danh sách thư mục Apache tạo ra theo cách đó.)


4
Đây là một giải pháp tuyệt vời và ít xâm lấn hơn so với sửa đổi tệp httpd.conf.
Andrew Swift

1
trên máy chủ của tôi, nó .htaccesscũng có thể ảnh hưởng đến tất cả các thư mục con, có lẽ apache sẽ tìm kiếm bất kỳ .htaccessthư mục mẹ nào cho đến thư mục gốc của thư mục trang web
phân cực

2
Vâng, đó là cách .htaccesshoạt động trên tất cả các máy chủ - nó cũng ảnh hưởng đến tất cả các thư mục con. Tuy nhiên, các trang liệt kê thư mục do Apache tạo ra không thể bị ép buộc thành UTF-8 bằng cách sử dụng .htaccess(AFAIK).
Mathias Bynens

9
Hãy lưu ý thay đổi serverwide thiết lập thông qua .htaccesscác file nói chung là xấu thực hành. Lỗi trở nên khó theo dõi hơn khi cài đặt máy chủ được phân phối trên các tệp khác nhau. Cũng có một hiệu năng nhỏ: với mỗi tệp được yêu cầu, Apache phải đọc .htaccesstệp của thư mục và tất cả .htaccesscác tệp của thư mục mẹ. .htaccessdo đó, chỉ nên được sử dụng cho một trong hai cài đặt cụ thể của thư mục (ví dụ: ngăn truy cập vào một thư mục cụ thể) hoặc khi hoàn toàn không có khả năng giành quyền quản trị viên.
Robbert

2
Được bình chọn, IndexOptions + Charset = UTF-8 đã lừa tôi, cảm ơn!
mTorres

28

Xem Chỉ thị AddDefaultCharset , Chỉ thị AddCharsetbài viết này .

AddDefaultCharset utf-8

Nhưng tôi phải sử dụng các ký tự Trung Quốc bây giờ và sau đó. Trước đây, tôi đã dịch các ký tự tiếng Trung sang mã Unicode và đưa nó vào tài liệu bằng cách sử dụng bản &#hack. Nhưng nó chỉ hữu ích cho trang có một vài ký tự.

Có một cách tốt hơn để làm điều đó: mã hóa thông tin bộ ký tự trong tên tệp và apache sẽ xuất ra tiêu đề mã hóa phù hợp dựa trên đó. Điều này có thể nhờ vào các AddCharsetdòng trong tệp conf, chẳng hạn như dòng dưới đây:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Vì vậy, nếu bạn có một tệp có tên kết thúc .html.utf8, apache sẽ phục vụ trang như thể nó được mã hóa trong UTF-8 và sẽ bỏ chỉ thị mã hóa ký tự phù hợp trong tiêu đề tương ứng.


23

Đặt AddDefaultCharset UTF-8vào /etc/apache2/conf.d/charset. Trên thực tế, nó đã ở đó. Bạn chỉ cần bỏ ghi chú bằng cách loại bỏ phần trước #.


2
Không có tập tin như vậy /etc/apache2/conf.d/charset. Nó là một tập tin tùy chỉnh bao gồm phân phối của bạn. Như bất kỳ tập tin nào khác không httpd.conf.
Evi1M4chine 20/07/2015

1
/etc/apache2/conf-enabled/charset.confnằm trong bản phân phối của tôi (Ubuntu 16.4). Cũng không hoạt động.
Alator

23

Trong .htaccess thêm dòng này:

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

Cái này dành cho những người không có quyền truy cập vào tập tin conf của máy chủ của họ. Nó chỉ là một điều nữa để thử khi những nỗ lực khác không thành công.

Theo như các vấn đề về hiệu suất liên quan đến việc sử dụng .htaccess tôi chưa thấy điều này. Thời gian tải trang điển hình của tôi là 150-200 mS có hoặc không có .htaccess

Hiệu suất tốt là gì nếu trang của bạn không hiển thị chính xác. Hầu hết các máy chủ được chia sẻ không cho phép người dùng truy cập vào tệp cấu hình là nơi ưa thích để thêm bộ ký tự.


Tôi không thể giải thích, nhưng chỉ có giải pháp này hiệu quả với tôi. Đó là lý do tại sao +1 lớn
Skalár Wag

1
Như đã đề cập bởi @Robbert trước đó - nếu bạn chưa sử dụng .htaccesstệp, đừng bắt đầu ngay bây giờ. Có những lý do về hiệu suất và quản trị tại sao đây là Ý tưởng tồi (tm)
Tín hiệu

Khi bạn không bao gồm các tiện ích mở rộng, AddCharset được áp dụng cho văn bản / html loại văn bản và văn bản / thuần túy.
Hiểu lầm

Điều này làm việc cho tôi trong khi tất cả các awnsers trên không. +1
Alator

Câu trả lời được chấp nhận chỉ ảnh hưởng đến tex / html và văn bản / thuần túy: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV

10

Tôi không chắc liệu bạn có quyền truy cập vào cấu hình Apache (httpd.conf) hay không nhưng bạn sẽ có thể đặt Chỉ thị AddDefaultCharset. Xem:

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

Tìm mô-đun mod_mime.c và đảm bảo các mục sau được đặt:

AddDefaultCharset utf-8 

hoặc các tài liệu Apache 1.x tương đương ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Tuy nhiên, điều này chỉ hoạt động khi "loại nội dung phản hồi là văn bản / thuần túy hoặc văn bản / html".

Bạn cũng nên đảm bảo rằng các trang của bạn cũng có bộ ký tự. Xem phần này để biết thêm:

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


8

Điều này chưa được kiểm tra nhưng có thể sẽ làm việc.

Trong tệp .htaccess của bạn, hãy đặt:

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

Tuy nhiên, điều này sẽ yêu cầu mod_headers trên máy chủ.


Điều đó làm việc cho tôi, trong khi giải pháp được chọn thì không. Cảm ơn bạn! Trên thực tế, tôi thậm chí không phải bọc nó trong <Files>các thẻ.
Geremia

8

Để đầy đủ, trên Apache2 trên Ubuntu, bạn sẽ tìm thấy bộ ký tự mặc định trong charset.conf trong conf-Available.

Bỏ sót dòng

AddDefaultCharset UTF-8

3

Trong đó tất cả các tệp HTML nằm trong UTF-8 và không có thẻ meta cho loại nội dung, tôi chỉ có thể đặt mặc định cần thiết cho các tệp này được gửi bởi Apache 2.4 bằng cách thêm cả hai lệnh:

AddLanguage ru .html
AddCharset UTF-8 .html

3

Chỉ là một gợi ý nếu bạn có tên tệp dài trong utf-8: theo mặc định, chúng sẽ được rút ngắn xuống còn 20 byte, do đó, có thể xảy ra rằng ký tự cuối cùng có thể bị "cắt làm đôi" và do đó không được nhận dạng đúng. Sau đó, bạn có thể muốn thiết lập như sau:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth cài đặt sẽ ngăn việc rút ngắn tên tệp của bạn, làm cho chúng hiển thị đúng và dễ đọc.

Như những người dùng khác đã đề cập, điều này nên được thêm vào httpd.confhoặc apache2.conf(nếu bạn có quyền quản trị) hoặc trong .htaccess(nếu bạn không).


2

Hãy để trống 'default_charset' in WHM :::::: default_charset =''

ps - Trong WHM đi --------) Trang chủ »Cấu hình dịch vụ» Trình chỉnh sửa cấu hình PHP ----) nhấp vào 'Chế độ nâng cao' ----) tìm 'default_charset' và để trống ---- chỉ không có gì, không phải utf8, không phải ISO


0

Trong trường hợp của tôi, thêm vào .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.