ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我发现它实际上使用的是 HTML 3.2 的 DOCTYPE,然后根本没有 charset ......所以它没有设置任何编码。但是有没有办法将其更改为使用 UTF-8?

这个问题很老了,但目前(2021 年),至少在我的情况下(Debian 10),utf-8 字符已正确提供,似乎不需要取消注释或将设置 AddDefaultCharset 更改为 utf-8完全没有(在 Debian 上,它在 /etc/apache2/conf-available/charset.conf 中)。

M
MartinodF

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

AddDefaultCharset utf-8

在文件中的什么地方添加这个,任何地方?
@Geoffrey 是的。如果它还没有,你可以把它放在任何地方。但是,出于多种原因,我通常将每个“自定义”指令都放在文件的底部(覆盖预先存在的指令、顺序,并且只是为了轻松查看我从库存配置中所做的更改)。
将 AddDefaultCharset utf-8 添加到 .htaccess - 对我很有帮助。 (如果您无权访问 httpd.conf)
是否区分大小写?
由于此答案来自 2009 年:在 Ubuntu 18 中,您在 /etc/apache2/conf-available/charset.conf 中更改此配置
M
Mathias Bynens

将此添加到您的 .htaccess

IndexOptions +Charset=UTF-8

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

AddDefaultCharset UTF-8

(您也可以在 .htaccess 中使用 AddDefaultCharset,但它不会以这种方式影响 Apache 生成的目录列表。)


这是一个很好的解决方案,并且比修改 httpd.conf 文件侵入性更小。
在我的服务器上,.htaccess 也会影响所有子目录,可能 apache 会在父目录中查找任何 .htaccess,一直到网站文件夹的根目录
是的,这就是 .htaccess 在所有服务器上的工作方式——它也影响所有子目录。但是,不能使用 .htaccess (AFAIK) 将 Apache 生成的目录列表页面强制为 UTF-8。
请注意,通过 .htaccess 文件更改 serverwide 设置通常是不好的做法。当服务器设置分布在各种文件中时,错误变得更难跟踪。性能也会受到轻微影响:对于每个请求的文件,Apache 必须读取目录的 .htaccess 文件和父目录的所有 .htaccess 文件。因此,.htaccess 应仅用于目录特定设置(例如,阻止访问特定目录)或绝对不可能获得管理员权限的情况。
投票赞成,IndexOptions +Charset=UTF-8 对我有用,谢谢!
E
Eugene Yokota

请参阅 AddDefaultCharset DirectiveAddCharset Directivethis article

AddDefaultCharset utf-8

但我不得不时不时地使用汉字。以前,我使用 &# hack 将中文字符翻译成 Unicode 代码并将其包含在文档中。但它只对有几个字符的页面有用。有一种更好的方法可以做到这一点:在文件名中编码字符集信息,apache 将基于此输出正确的编码头。这要归功于 conf 文件中的 AddCharset 行,例如以下行:conf/httpd.conf:

AddCharset UTF-8 .utf8

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


P
Peter Mortensen

在文件 .htaccess 中,添加以下行:

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

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

至于有关使用文件 .htaccess 的性能问题,我还没有看到这一点。我的典型页面加载时间是 150-200 毫秒,有或没有文件 .htaccess。

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


我无法解释,但只有这个解决方案对我有用。这就是为什么大+1
正如@Robbert 之前提到的 - 如果您还没有使用 .htaccess 文件,请不要现在开始。有性能&为什么这是一个坏主意的行政原因(tm)
当您不包含扩展时,AddCharset 将应用于内容类型 text/html 和 text/plain。
这对我有用,而所有上述 awnsers 都没有。 +1
接受的答案仅影响 tex/html 和 text/plain:httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
B
Bjartur Thorlacius

在 Ubuntu 12.04 上,取消注释 /etc/apache2/conf.d/charset 中的行 AddDefaultCharset UTF-8 就足够了。如果您使用的是上游 Apache,该文件可能名为 httpd.conf,您可能必须插入该行。


没有像 /etc/apache2/conf.d/charset 这样的文件。它是您的发行版的自定义包含文件。与任何其他不是 httpd.conf 的文件一样。
它在我的发行版(Ubuntu 16.4)上的 /etc/apache2/conf-enabled/charset.conf。也没有工作。
您能否update your answer,例如使用 Linux 分发信息,包括。版本。例如,最初的 Linux 发行版和版本是什么? (但没有“编辑:”、“更新:”或类似的 - 答案应该看起来好像是今天写的。)
D
David Glance

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

取消注释该行

AddDefaultCharset UTF-8

什么是“conf-available”?配置文件中的一个部分?一份文件?文件在哪里?
在 Ubunto 20.04 上,文件在这里:/etc/apache2/conf-available/charset.conf
J
Jon

我不确定您是否有权访问 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


P
Peter Mortensen

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

在您的 .htaccess 文件中,添加:

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

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


这对我有用,而选择的解决方案没有。谢谢!事实上,我什至不必将它包装在 <Files> 标记中。
什么是“mod_headers”?它去哪里或如何设置?
当其他答案都没有时,这对我有用。我还发现有一个 FilesMatch 标签也有效。
P
Peter Mortensen

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

IndexOptions Charset=UTF-8 NameWidth=*

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

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


什么将它们缩短到 20 个字节?上下文是什么?
h
hon2a

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

AddLanguage ru .html
AddCharset UTF-8 .html

P
Peter Mortensen

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

PS:在WHM中,转到→主页→服务配置→PHP配置编辑器→单击“高级模式”→找到“default_charset”并将其留空。什么都没有,不是 UTF-8 也不是 ISO。


ISO是什么? ISO 8859-1
P
Peter Mortensen

覆盖 Apache 默认字符集 (cf /etc/apache2/conf.d/charset)

如果这还不够,那么您可能使用 ISO 8859-1 编码字符集创建了原始文件。您必须将其转换为正确的字符集:

iconv -f ISO-8859-1 -t UTF-8 source_file.php -o new file.php

P
Peter Mortensen

就我而言,我将此添加到文件 .htaccess 中:

AddDefaultCharset off
AddDefaultCharset windows-1252