如何将Apache的默认编码更改为UTF-8?


138

我使用的是托管公司,如果文件index.html不在目录中,它将在目录中列出文件,它使用iso-8859-1作为默认编码。

如果服务器是Apache,是否可以将UTF-8设置为默认值?

更新:另外,我发现它实际上使用的是HTML 3.2的DOCTYPE,然后根本没有字符集...因此它没有设置任何编码。但是有没有办法将其更改为使用UTF-8?

Answers:


176

在httpd.conf中添加(或更改它是否已经存在):

AddDefaultCharset utf-8

6
在文件中的何处将其添加到任何地方?
systemovich 2010年

5
@Geoffrey是的。如果还不存在,则可以将其放置在任何地方。但是,出于多种原因,我通常将每个“自定义”指令放在文件的底部(覆盖预先存在的指令,顺序,只是为了轻松查看我从stock config所做的更改)。
MartinodF

6
将AddDefaultCharset utf-8添加到.htaccess-对我来说很有魅力。(如果您没有访问httpd.conf的权限)
richardwhitney

是否区分大小写?
Mike Stoddart

6
由于此答案来自2009年:在Ubuntu 18中,您可以在/etc/apache2/conf-available/charset.conf
WoodrowShigeru

55

将此添加到您的.htaccess

IndexOptions +Charset=UTF-8

或者,如果您具有管理员权限,则可以通过编辑httpd.conf和添加以下内容进行全局设置:

AddDefaultCharset UTF-8

(您也可以使用AddDefaultCharsetin .htaccess,但那样不会影响Apache生成的目录列表。)


4
与修改httpd.conf文件相比,这是一个很好的解决方案,并且侵入性较小。
安德鲁·斯威夫特

1
在我的服务器上,.htaccess也可能会影响所有子目录,apache可能会一直寻找.htaccess父目录中的所有目录,直到网站文件夹的根目录
nonopolarity 2012年

2
是的,这就是.htaccess在所有服务器上的工作方式-它也会影响所有子目录。但是,使用.htaccess(AFAIK)不能将Apache生成的目录列表页面强制设置为UTF-8 。
Mathias Bynens 2012年

9
请注意,通过文件更改服务器范围的设置.htaccess通常是不好的做法。当服务器设置分布在各种文件中时,错误变得更加难以跟踪。性能也会受到轻微影响:对于每个请求的文件,Apache必须读取目录的.htaccess文件以及.htaccess父目录的所有文件。.htaccess因此,仅应将其用于特定于目录的设置(例如,阻止访问特定目录)或绝对不可能获得管理员权限的情况。
罗伯特

2
经过投票后,IndexOptions + Charset = UTF-8为我成功了,谢谢!
mTorres 2013年

28

请参阅AddDefaultCharset指令AddCharset指令本文

AddDefaultCharset utf-8

但是我必须不时使用汉字。以前,我将汉字转换为Unicode代码,并使用&#hack 将其包含在文档中 。但这仅对具有几个字符的页面有用。

有一种更好的方法:对文件名中的字符集信息进行编码,并且apache将基于该信息输出正确的编码头。这要归功于 AddCharsetconf文件中的行,例如下面的行:

conf/httpd.conf

AddCharset UTF-8 .utf8

因此,如果您有一个文件名以结尾的文件.html.utf8,则apache将像使用UTF-8进行编码一样为页面提供服务,并将相应的正确字符编码指令转储到标题中。


23

地方AddDefaultCharset UTF-8/etc/apache2/conf.d/charset。实际上,它已经在那里。您只需删除前面的注释就可以取消注释#


2
没有这样的文件/etc/apache2/conf.d/charset。它是您的发行版中的自定义包含文件。就像不是的其他任何文件一样httpd.conf
Evi1M4chine 2015年

1
/etc/apache2/conf-enabled/charset.conf在我的发行版上(Ubuntu 16.4)。也没有用。
Alator

23

在.htaccess中添加以下行:

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

这适用于那些无法访问其服务器的conf文件的用户。当其他尝试失败时,尝试只是另一件事。

至于有关使用.htaccess的性能问题,我还没有看到。我的典型页面加载时间是150-200 mS(带有或不带有.htaccess)

如果您的页面无法正确呈现,性能会有什么好处。大多数共享服务器不允许用户访问配置文件,这是添加字符集的首选位置。


我无法解释,但只有此解决方案对我有用。这就是为什么一个大+1
Skalár摇尾

1
如@Robbert先前所述-如果您尚未使用.htaccess文件,请不要立即开始。由于性能和管理原因,这是一个不好的主意(tm)
Signal15 2014年

如果不包括扩展名,则AddCharset将应用于内容类型text / html和text / plain。
2015年

这对我有用,而上述所有遮篷都没有。+1
Alator

接受的答案只会影响TEX / html和text / plain的:httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV

10

我不确定您是否有权访问Apache配置(httpd.conf),但应该可以设置AddDefaultCharset指令。看到:

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

查找mod_mime.c模块,并确保设置了以下内容:

AddDefaultCharset utf-8 

或等效的Apache 1.x文档(http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset)。

但是,这仅在“响应内容类型为text / plain或text / html”时有效。

您还应确保页面也设置了字符集。看到更多信息:

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


8

这未经测试,但可能会起作用。

在您的.htaccess文件中,输入:

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

但是,这将需要服务器上的mod_headers。


这对我有用,而选择的解决方案却没有。谢谢!实际上,我什至不必将其包装在<Files>标签中。
Geremia

8

为了完整起见,在Ubuntu上的Apache2上,您将在conf-available的charset.conf中找到默认字符集。

取消注释行

AddDefaultCharset UTF-8

3

在所有HTML文件都位于UTF-8中且没有内容类型的元标记的情况下,我只能通过添加两个指令为Apache 2.4发送的这些文件设置所需的默认值:

AddLanguage ru .html
AddCharset UTF-8 .html

3

如果您在utf-8中使用长文件名,这只是一个提示:默认情况下,文件名会缩短为20个字节,因此最后一个字符可能会“切成两半”,因此无法正确识别。然后,您可能需要设置以下内容:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth 设置将防止缩短文件名,从而使其正确显示和可读。

正如其他用户已经提到的那样,应在httpd.confapache2.conf(如果您具有管理员权限)或在.htaccess(如果您没有)中将其添加。


2

只需将其留空: 'default_charset' in WHM :::::: default_charset =''

ps-在WHM中,转到--------)主页»服务配置»PHP配置编辑器----)单击“高级模式” ----)找到“ default_charset”并将其留空----只是没有,不是utf8,不是ISO


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.