如何将 default.html 的字符编码设置为 UTF-8?
Posted
技术标签:
【中文标题】如何将 default.html 的字符编码设置为 UTF-8?【英文标题】:How do I set character encoding to UTF-8 for default.html? 【发布时间】:2009-05-25 02:57:41 【问题描述】:我花了最后几个小时让我的网站验证html 4.01 Strict,实际上我已经成功了,但仍然有一个警告我无法摆脱。警告是:
字符编码不匹配!
中指定的字符编码 HTTP 标头 (iso-8859-1) 是 不同于中的值 元素(utf-8)。我将使用该值 来自 HTTP 标头 (iso-8859-1) 的 这个验证。
有问题的页面是www.dubiousarray.net/default.html。正如您从页面源代码中看到的那样,我有以下元元素:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
并且我已确保 default.html 文件以 UTF-8 编码保存。奇怪的是站点中的所有其他页面都在没有此警告的情况下进行验证,并且它们具有相同的元标记并且以完全相同的方式保存。我很确定这与服务器配置有关。 .htaccess 文件现在看起来像这样:
# Use php 5 as default
AddHandler application/x-httpd-php5 .php
AddDefaultCharset UTF-8
但是我已经尝试了this page 上显示的所有修复程序,但没有一个有效。我怎样才能摆脱这个警告?
在 Firefox 中,如果您右键单击页面并选择“查看页面信息”,default.html 显示为 ISO-8859-1,而所有其他页面显示为 UTF-8。
所有的 html 文件都以完全相同的方式创建和保存(字符编码设置为 UTF-8,不带BOM),但 default.html 是唯一不一样的文件显示为 UTF-8。所以我假设服务器正在对 default.html 文件做一些特殊的事情,尽管我不确定是什么,因为在 .htaccess 文件中没有它的迹象。 p>
【问题讨论】:
【参考方案1】:您需要替换 HTTP 级别的标头。
这应该可行:
<?php
header('Content-type: text/html; charset=utf-8');
?>
请注意,以上内容必须是您文件中的第一件事。没有例外。请参阅header。
有关如何更改不同网络堆栈中的字符集标头的一般信息,请参阅Setting the HTTP charset parameter。
【讨论】:
看起来它应该解决问题,因为它是在服务器弄乱它之后出现的,但由于我不再拥有导致问题的 default.html 文件,所以我无法对其进行测试。我会假设它会起作用:-)。 但这不适用于静态 HTML 页面(即使问题在配置文件中提到了一些不相关的 PHP 设置)。【参考方案2】:服务器在 HTTP 标头中清楚地将文档标记为 ISO-8859-1。尝试使用 UTF-8 编码和适当的编辑器保存 default.html。
【讨论】:
default.html 文件已使用适当的编辑器保存为 UTF-8(确切地说是没有 BOM 的 UTF-8)。当我保存它时,我几乎可以肯定编码是正确的,因为当 Firefox 检查时,网站上的所有其他页面都显示为 UTF-8。服务器似乎对 default.html 文件做了一些特殊的事情。【参考方案3】:将其包含在您的代码中:
<meta charset="utf-8" />
【讨论】:
Re "in your code":你不是说在静态 HTML 文件中吗?【参考方案4】:好的,我想出了部分解决方案来解决我的问题。由于只有 default.html 文件导致了警告,因此我认为服务器因其名称而对其进行了特殊处理。所以我创建了一个名为 home.html 的新文件,其内容与 default.html 文件相同,并将 .htaccess 文件指向新文件文件(见下面的第 3 行)。
# Use PHP5 as default
AddHandler application/x-httpd-php5 .php
DirectoryIndex home.html
AddDefaultCharset UTF-8
这解决了问题,现在所有文件都被识别为 UTF-8。我仍然不确定服务器对 default.html 文件做了什么或相关设置在哪里,但随着我的问题消失,我会忘记这一点。
【讨论】:
【参考方案5】:从.htaccess
中删除AddDefaultCharset
并检查编码。
我保存了您网页的 HTML 源代码并打开了它。编码被检测为 UTF-8。但是,在查看 Web 服务器提供的同一网页时,编码为 ISO-8859-1。这就是为什么我建议删除以前的冗余规则。
【讨论】:
我从 .htaccess 文件中删除了该规则,因为您是对的,这似乎是多余的,但它并没有采取任何措施来解决问题。以上是关于如何将 default.html 的字符编码设置为 UTF-8?的主要内容,如果未能解决你的问题,请参考以下文章