0

我在一个网站上工作,当我尝试验证页面时出现以下错误:

HTTP 标头 (iso-8859-1) 中指定的字符编码与元素 (utf-8) 中的值不同。我将使用 HTTP 标头 (iso-8859-1) 中的值进行此验证。

这是我的标题中的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>

我看不出 iso-8859-1 是从哪里来的。有什么建议么?

谢谢。

4

3 回答 3

1

检查发送的默认HTTP 标头(如果您使用它,您可以在 NET 选项卡的 firebug 中看到它)。

可能有一个Content-Type标头设置为iso-8859-1.

HTTP 标头不同于 HTML 标头(它是 HTTP 消息正文的一部分) - 您的 META 标记指定UTF-8为内容类型。

由于这两个值不兼容,因此您会收到错误消息。

解决方案:

  • 使两种内容类型相同(或者UTF-8,或iso-8859-1
于 2010-10-06T15:00:30.147 回答
1

它是在 HTTP 标头中指定编码的网络服务器。它将其设置为 iso-8859-1。但是在您的页面中,您写道:

<meta http-equiv="Content-type" content="text/html;charset=UTF-8"/>

这两个值是不相容的。我只能假设网络服务器是正确的(它已经发送了数据),验证器也做出了同样的假设。

如果要发送 UTF-8 编码的文件,请检查内容是否真的是 UTF8 编码,并检查标头信息。最终,行为取决于网络服务器配置和页面生成。

于 2010-10-06T15:00:52.807 回答
1

那是您的 HTML 文件的标头,而不是服务器发送的 HTTP 标头。meta 元素定义了 HTTP 标头的等价物。如果发送了 HTTP 标头并且存在具有等价物的元元素,则用户代理必须决定使用哪个。它可能在您的浏览器中工作,但您使用的验证器似乎优先于实际的 HTTP 标头。

所以你必须弄清楚如何让你的服务器发送正确的 Content-type 标头。如果您的页面是由 PHP 脚本生成的,您可以header('Content-type:text/html;charset=UTF-8');在脚本的开头使用它来修复它。

于 2010-10-06T15:01:15.297 回答