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

nop*_*ole 131 apache character-encoding apache-config

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

如果服务器是Apache,有没有办法将UTF-8设置为默认值?

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

Mar*_*odF 166

在httpd.conf中添加(或者如果它已经存在则更改):

AddDefaultCharset utf-8
Run Code Online (Sandbox Code Playgroud)

  • 由于此答案来自 2009 年:在 Ubuntu 18 中,您可以在 `/etc/apache2/conf-available/charset.conf` 中更改此配置 (10认同)
  • 在文件中的哪个地方添加这个,在哪里? (6认同)
  • @Geoffrey是的.如果它还没有,你可以把它放在任何地方.但是,我通常将每个"自定义"指令放在文件的底部,原因有很多(覆盖预先存在的指令,顺序,只是为了轻松地看到我从库存配置中做了什么改变). (5认同)
  • 添加AddDefaultCharset utf-8到.htaccess - 为我做了一个魅力.(如果您无权访问httpd.conf) (5认同)

Mat*_*ens 52

将此添加到您的.htaccess:

IndexOptions +Charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

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

AddDefaultCharset UTF-8
Run Code Online (Sandbox Code Playgroud)

(您可以用AddDefaultCharset.htaccess太,但它不会影响到Apache的生成的目录列表的方式.)

  • 请注意,通过`.htaccess`文件更改**服务器范围**设置通常是不好的做法.当服务器设置分布在各种文件中时,很难跟踪错误.还有轻微的性能损失:对于每个请求的文件,Apache必须读取目录的`.htaccess`文件和父目录的所有`.htaccess`文件.因此,`.htaccess`只能用于特定于目录的设置(例如,阻止访问特定目录)或者绝对不可能获得管理员权限. (8认同)
  • 与修改httpd.conf文件相比,这是一个很好的解决方案,并且侵入性较小. (4认同)
  • 是的,.htaccess在所有服务器上都是这样,它也会影响所有子目录。但是,不能通过使用.htaccess(AFAIK)将Apache生成的目录列表页面强制设置为UTF-8。 (2认同)
  • 经过投票后,IndexOptions + Charset = UTF-8为我成功了,谢谢! (2认同)

Eug*_*ota 24

请参阅AddDefaultCharset指令,AddCharset指令本文.

AddDefaultCharset utf-8
Run Code Online (Sandbox Code Playgroud)

但我不得不时不时地使用汉字.以前,我将中文字符翻译成Unicode代码,并使用&#hack 将其包含在文档中 .但它仅对具有少量字符的页面有用.

有一种更好的方法:编码文件名中的字符集信息,apache将根据它输出正确的编码标题.这可以归功于 AddCharsetconf文件中的行,例如下面的行:

conf/httpd.conf:

AddCharset UTF-8 .utf8
Run Code Online (Sandbox Code Playgroud)

因此,如果您有一个名称以文件结尾的文件.html.utf8,则apache将为该页面提供服务,就像它以UTF-8编码一样,并相应地在标头中转储正确的字符编码指令.


Mis*_*ood 22

在.htaccess中添加以下行:

AddCharset utf-8 .html .css .php .txt .js
Run Code Online (Sandbox Code Playgroud)

这适用于那些无法访问其服务器的conf文件的人.当其他尝试失败时,尝试再做一件事.

至于使用.htaccess的性能问题,我还没有看到这个.我的典型页面加载时间为150-200 mS,有或没有.htaccess

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


Bja*_*ius 21

AddDefaultCharset UTF-8/etc/apache2/conf.d/charset.事实上,它已经存在了.您只需删除前面的内容即可取消注释#.

  • 它在我的发行版(Ubuntu 16.4)上的`/etc/apache2/conf-enabled/charset.conf`。也没有工作。 (3认同)
  • 没有`/ etc/apache2/conf.d/charset`这样的文件.它是您的发行版的自定义包含文件.和任何其他不是`httpd.conf`的文件一样. (2认同)

Jon*_*Jon 8

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

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

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

AddDefaultCharset utf-8 
Run Code Online (Sandbox Code Playgroud)

或等效的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


Mif*_*Fox 7

这是未经测试但可能会奏效.

在你的.htaccess文件中:

<Files ~ "\.html?$">  
     Header set Content-Type "text/html; charset=utf-8"
</Files>
Run Code Online (Sandbox Code Playgroud)

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

  • 这对我有用,而其他答案都不起作用。我还发现有一个 FilesMatch 标签也有效。 (2认同)

Dav*_*nce 7

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

取消注释该行

AddDefaultCharset UTF-8
Run Code Online (Sandbox Code Playgroud)


pst*_*ryk 5

如果您有 UTF-8 格式的长文件名,请注意:默认情况下,它们将被缩短为 20 个字节,因此最后一个字符可能会被“切成两半”,因此无法正确识别。然后您可能需要设置以下内容:

IndexOptions Charset=UTF-8 NameWidth=*

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

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