没有在文档级别声明的字符编码

时间:2016-01-14 15:39:01

标签: php html encoding character-encoding

当我在w3.org验证我的网站时,我得到以下 info

  

在文档级别声明没有字符编码     在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

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

<?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" />

我不知道还能做些什么来解决这个问题。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

  

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

<?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">

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

此外,我已经上传了您的示例,我收到的错误只有encoding中包含错误http-equiv参数的错误,只需删除此行即可解决问题。也许您的文件中嵌入了一些iframe或其他文档?