【问题标题】:How to change the default encoding to UTF-8 for Apache如何将 Apache 的默认编码更改为 UTF-8
【发布时间】:2010-10-29 04:05:40
【问题描述】:

我正在使用托管公司,如果文件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)。

标签: apache character-encoding apache-config


【解决方案1】:

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

AddDefaultCharset utf-8

【讨论】:

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

将此添加到您的.htaccess

IndexOptions +Charset=UTF-8

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

AddDefaultCharset UTF-8

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

【讨论】:

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

请参阅AddDefaultCharset DirectiveAddCharset Directivethis article

AddDefaultCharset utf-8

但我必须使用汉字 时不时。之前我翻译过 汉字转Unicode码和 使用 &# 黑客。但它只对 页面有几个字符。

有一个更好的方法来做到这一点: 将字符集信息编码在 文件名,apache 将输出 基于此的正确编码头。 这是可能的,这要归功于 AddCharset conf 文件中的行, 比如下面这行:

conf/httpd.conf:

AddCharset UTF-8 .utf8

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

【讨论】:

    【解决方案4】:

    在文件.htaccess中,添加这一行:

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

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

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

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

    【讨论】:

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

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

    【讨论】:

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

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

    取消注释该行

    AddDefaultCharset UTF-8
    

    【讨论】:

    • 什么是“conf-available”?配置文件中的一个部分?一份文件?文件在哪里?
    • 在 Ubunto 20.04 上,文件在这里:/etc/apache2/conf-available/charset.conf
    【解决方案7】:

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

      【讨论】:

      • 这对我有用,而选择的解决方案却没有。谢谢!事实上,我什至不必将其包装在 &lt;Files&gt; 标签中。
      • 什么是“mod_headers”?它去哪里或如何设置?
      【解决方案9】:

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

      IndexOptions Charset=UTF-8 NameWidth=*

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

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

      【讨论】:

      • 什么将它们缩短到 20 字节?上下文是什么?
      【解决方案10】:

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

      AddLanguage ru .html
      AddCharset UTF-8 .html
      

      【讨论】:

        【解决方案11】:

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

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

        【讨论】:

        【解决方案12】:

        覆盖 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
        

        【讨论】:

          【解决方案13】:

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

          AddDefaultCharset off
          AddDefaultCharset windows-1252
          

          【讨论】:

            猜你喜欢
            • 2015-04-14
            • 2017-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-10
            • 2012-02-01
            • 2019-10-25
            相关资源
            最近更新 更多