我花了最后几个小时让我的网站验证HTML 4.01严格,我实际上已经取得了成功,但仍然有一个我无法摆脱的警告。警告是:
字符编码不匹配!
中指定的字符编码 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">
我确保使用UTF-8编码保存default.html文件。奇怪的是,网站中的所有其他页面都在没有此警告的情况下进行验证,并且它们具有相同的元标记,并以完全相同的方式保存。我很确定它与服务器配置有关。 .htaccess文件目前看起来像这样:
# Use PHP5 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文件中没有它的标志。
答案 0 :(得分:26)
您需要替换HTTP级别的标题。
这应该有效:
<?php
header('Content-type: text/html; charset=utf-8');
?>
请注意,上述内容必须是您文件中的第一件事。没有例外。看到 http://us2.php.net/manual/en/function.header.php
有关如何更改不同Web堆栈中的字符集标题的一般信息,请参阅 http://www.w3.org/International/O-HTTP-charset
拉里
答案 1 :(得分:2)
服务器在HTTP标头中清楚地将文档标记为ISO-8859-1。尝试使用正确的编辑器使用UTF-8编码保存default.html。
答案 2 :(得分:1)
好的,我已经找到了解决问题的部分方法。因为它只是导致警告的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文件做了什么,或者相关的设置在哪里,但由于我的问题已经消失,我将忘记这一点。
答案 3 :(得分:0)
您可以从AddDefaultCharset
删除.htaccess
并检查编码吗?我保存了您网页的HTML源代码并将其打开。编码被检测为UTF-8。但是,在查看由您的网络服务器提供的同一网页时,编码为ISO-8859-1。这就是为什么我建议删除以前的冗余规则。
答案 4 :(得分:0)
在您的代码中包含此内容:
<meta charset="utf-8" />
&#13;