Htaccess 文件
一些主机提供商不允许我们直接更改配置文件,但他们通常仍然允许使用 .htaccess 文件。
我们可以使用 htaccess 更改主文件中的许多相同配置选项。
要更改 htaccess 中的默认字符集,我们可以将以下内容添加到 .htaccess 文件中:IndexOptions +Charset=UTF-8
示例 .htaccess 文件如下所示:
DirectoryIndex index.php index.html IndexOptions +Charset=UTF-8
将 .htaccess 文件添加到根目录会影响我们网站的所有子目录。
例如:
- example.com/
- example.com/somedir/some-file.html
- example.com/somedir/blah/another-file.html
关于字符集的重要信息
在决定 Web 应用程序的字符集时,仅更改内容类型 HTTP 标头中的字符集是不够的;我们还应该确保数据本身实际上是使用指定的字符集进行编码的;如果使用源代码或者静态 HTML 文件,我们可以在 Visual Studio Code 等编辑器中更改编码。
此外,如果我们使用像 MySQL 这样的数据库,我们还应该确保数据库、表和列使用正确的字符集和排序规则。
字符集是一组符号和编码,而排序规则定义了比较字符集中字符的规则。
理解这一点并正确处理可能需要一些练习。
最近,utf8mb4 已成为一个很好的起点,因为它允许存储 4 字节字符,而较旧的 utf8 仅允许存储 3 字节字符。
这意味着 utf8mb4 支持更广泛的字符集。
在表列本身上使用 utf8mb4_0900_ai_ci 或者 utf8mb4_general_ci 的排序规则可能是最好的,只需记住保持一致并定义字符集并为数据库连接排序。
请注意 utf8mb4_0900_ai_ci 较新,并且在 MySQL 8.0.1 中是默认值。
如何更改 Apache 使用的默认字符集将取决于具体设置;本教程将基于 Debian 和 Ubuntu 的配置。
更改字符集的最简单且推荐的方法是添加自定义 .conf 文件,我们可以将其包含在网站配置中。
例如,如果我们在同一台服务器上托管多个域,我们可以编辑单独的 v-host 文件;但是拥有一个包含共享配置的自定义 .conf 文件会更容易。
通常你会在 /etc/apache2/sites-available 中找到 v-host 配置文件。
要更改服务器上所有域的字符集,我们可以编辑 /etc/apache2/conf-available/charset.conf — 但在不同的 VirtualHost 使用不同字符集的环境中,这并不理想。
可以通过向文件添加 AddDefaultCharset UTF-8 来通过 v-host .conf 文件更改字符集。
但是,由于某些托管服务提供商阻止编辑服务器配置文件,因此这并不总是可行的。
或者,我们有时可以改用 .htaccess 文件。
为此,只需将 IndexOptions +Charset=UTF-8 添加到 .htaccess 文件并将其放置在网站根目录中。
我们不应更改 httpd.conf 或者 apache2.conf 文件。
相反,我们应该将自己的配置文件添加到 /etc/apache2/conf-available/并使用 a2enconf 命令启用它们,或者编辑目录中的现有文件。
请注意,这些文件中的配置通常适用于所有 v-host。
更改字符集后,请确保我们没有在元或者 XML 编码标记中设置不同的字符集,因为这些字符集可能会被服务器端 HTTP 标头覆盖,例如使用 AddDefaultCharset 指令或者 PHP 的标头函数添加的标头。
AddDefaultCharset 只会更改 text/plain 或者 text/html 内容类型的字符集。
Apache配置文件
如果我们有权访问 Apache 配置文件,那么我们可以通过编辑单个 v-host 文件或者主配置文件 apache2.conf 轻松更改默认字符集。
下面是一个 v-host .conf 的例子:
# *** # used for testing purposes # *** <VirtualHost *:80> DocumentRoot "/var/www/testing/" ServerName testing.com ErrorLog ${APACHE_LOG_DIR}/testing.com-error.log CustomLog ${APACHE_LOG_DIR}/testing.com-access.log common <Directory "/var/www/testing/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all AddDefaultCharset utf-8 </Directory> </VirtualHost> </pre>
这些文件的位置通常是:/etc/apache2/sites-available
要全局应用更改,我们应该将自己的 .conf 文件添加到 /etc/apache2/conf-available/,或者更改现有文件之一。
要更改字符集,请创建一个文件(即 myconf.conf),将以下内容添加到文件中:
AddDefaultCharset utf-8
或者干脆取消注释 charset.conf 文件中的 AddDefaultCharset 指令(如果它存在于系统中)。
# Read the documentation before enabling AddDefaultCharset. # In general, it is only a good idea if you know that all your files # have this encoding. It will override any encoding given in the files # in meta http-equiv or xml encoding tags. AddDefaultCharset UTF-8 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
httpd.conf 已弃用,apache2.conf 可被系统覆盖——请勿使用这些文件添加用户配置!