【问题标题】:No Character encoding declared at document level没有在文档级别声明字符编码
【发布时间】:2016-01-14 15:39:01
【问题描述】:

当我在w3.org 中验证我的网站时,我得到以下信息作为信息

没有在文档级别声明字符编码 在 HTML 元元素或 XML 声明中未在文档中找到字符编码信息。通常建议在文档本身中声明字符编码,尤其是当文档有可能被读取或保存到磁盘、CD 等时。 有关技术和解释,请参阅此关于字符编码的教程。

我搜索了谷歌并尝试了他们的建议,但没有一个对我有用。

我已经在this question 中应用了所有建议的解决方案,但无济于事。

这里是网页的response header

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:keep-alive, close
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Thu, 14 Jan 2016 15:25:27 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding

以及php 基础网站中我的HTML 文件的第一行:

<?php header('Content-type: text/html; charset=utf-8');?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fa" lang="fa">
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
<meta content="utf-8" http-equiv="encoding" />
<meta charset="UTF-8" />

我不知道我还能做些什么来修复该消息。

感谢您的建议。

【问题讨论】:

  • &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt; with stron Type
  • @yergo 我已经想到了
  • w3.org/TR/html5/syntax.html#syntax-doctype 指定 DOCTYPE 需要是页面上的第一个标签,我认为这可能是问题所在。把你的 PHP 放在它后面,看看是否有帮助。
  • @JohnClifford 不,我不这么认为,doctype 之前的代码只是发送了一个标头,而您无法在任何输出后发送标头
  • &lt;meta content="utf-8" http-equiv="encoding" /&gt; 也应该只是 &lt;meta charset="utf-8" /&gt;

标签: php html encoding character-encoding


【解决方案1】:

对于 XML(包括 XHTML),在文档开头的 XML 声明或实体开头的文本声明中使用编码伪属性。示例:

<?xml version="1.0" encoding="utf-8" ?>

来自w3 manual。还介绍了一些其他技巧。

另外,html5 specs 建议,编码是区分大小写的参数,必须在文档的前 1024 个字节中声明。

此外,由于对元元素的诸多限制,每个文档只能有一个基于元的字符编码声明。

所以我建议这样保留您的 http 标头:

<?php header('Content-Type: text/html; charset=utf-8');

只留下一种元声明,例如:

<meta charset="utf-8">

我们会看看它是否有帮助。

我还上传了您的示例,我收到的唯一错误是 http-equiv 中的 encoding 参数错误,仅通过删除此行即可解决问题。也许您的文件中嵌入了一些 iframe 或其他文档?

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2012-07-22
    • 2012-11-09
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多