【问题标题】:Why is my html encoding causing an error?为什么我的 html 编码会导致错误?
【发布时间】:2010-10-06 14:54:28
【问题描述】:

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

中指定的字符编码 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 是从哪里来的。有什么建议吗?

谢谢。

【问题讨论】:

  • 它来自 HTTP 标头,正如验证器告诉您的那样。尝试使用 Web-Sniffer.net 查看 HTTP 标头。 (如果你更喜欢桌面软件,试试 Fiddler;它更易于配置,但 Web-Sniffer 更容易上手。)

标签: validation xhtml-transitional


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      解决方案:

      • 使两种内容类型相同(UTF-8iso-8859-1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        • 1970-01-01
        • 2011-07-07
        相关资源
        最近更新 更多