如何解决“在UTF-8文件中find的字节顺序标记”validation警告

我有一个xhtml严格的文档下的validationxhtml页面 – 但是,我得到这个警告,我试图理解 – 并更正。

只是,我怎么find这个错误的“字节顺序标记”。 我使用Visual Studio编辑我的文件 – 不知道这是否有帮助。

警告在UTF-8文件中find字节顺序标记。

已知UTF-8编码文件中的Unicode字节顺序标记(BOM)会导致某些文本编辑器和旧浏览器出现问题。 您可能要考虑避免使用它,直到它得到更好的支持。

问题的位置部分很简单: 字节顺序标记 (BOM)将位于文件的开头。

编辑文件时,转到File | Advanced Save Options... File | Advanced Save Options... ,你应该find一个“编码”下拉列表(以及“行结束”下拉列表)。 它可能设置为使用“Unicode(带签名的UTF-8) – Codepage 65001”。 如果向下滚动,可以find“Unicode(UTF-8 without signature) – Codepage 65001”。 这应该做到这一点(如果你想)。 如警告所示,某些系统可能会被UTF-8文件中的BOM所迷惑。

请参阅Unicode站点有关BOM和UTF-8文件的FAQ。 除了调用文件实际上是UTF-8以外,没有其他function。 尤其是字节顺序(我们有BOM)的主要原因是没有影响,因为UTF-8的字节顺序是固定的。

以下是我如何解决这个问题:

  1. 下载并安装Notepad ++

  2. 用记事本++打开文件

  3. 在菜单中select“Encoding”并将其设置为“不带BOM的UTF-8编码”

  4. 保存文件,BOM将会消失。

Linux中

Geany打开文件。

在菜单“ Dokument ”中取消选中“ Write Unicode BOM ”。

保存文件。

物料清单有时位于内部文本,而不是在开始 – 如果一个文件已被汇编了一段时间的PHP从其他文件使用例如include_once() 。 要删除它,删除BOM之前的至less一个字符和BOM之后的至less一个字符(以防万一)之间的区域。 BOM的位置可以位于Internet Explorer的F12 Developer Tools中,也可能位于Edge中。 它被形象化为黑色菱形/菱形

Visual Studio和WebMatrix可以保存有或没有签名的文件(在开头)。

在validation过程中( https://validator.w3.org/#validate_by_upload )或在控制台中,BOM会导致错误 – </ HEAD>在显然存在的情况下,可以被视为不带<HEAD>的孤立元素!

错误:杂散结束标签头。

<BODY>作为第二个<BODY>时,只有一个<BODY>存在,一切正确:

错误:开始标签正文,但同一types的元素已经打开。

而整个文档可以看到缺lessDOCTYPE,当BOM或者两个BOMS占据第一行,而DOCTYPE在第二行时,会出现类似这样的消息:

错误:未查看文档types时发现非空格字符。 预期如<!DOCTYPE html>。

错误:元素头缺less子元素标题的必需实例。

错误:杂散的文档types。

错误:杂散开始标记html。

错误:stream浪开始标签头。

错误:此时元素meta上不允许使用属性名称。

错误:Element meta缺less一个或多个以下属性:itemprop,property。

错误:此时元素meta不允许属性http-equiv。

错误:Element meta缺less一个或多个以下属性:itemprop,property。

错误:此时元素meta上不允许使用属性名称。

错误:Element meta缺less一个或多个以下属性:itemprop,property。

错误:元素链接缺less必需的属性属性。

错误:此时元素meta上不允许使用属性名称。

错误:Element meta缺less一个或多个以下属性:itemprop,property。

错误:此时元素meta上不允许使用属性名称。

错误:Element meta缺less一个或多个以下属性:itemprop,property。

错误:此时元素meta上不允许使用属性名称。

错误:Element meta缺less一个或多个以下属性:itemprop,property。

错误:元素标题不允许在此上下文中作为元素正文的子元素。 (抑制来自这个子树的进一步错误。)

错误:元素样式不允许在此上下文中作为元素正文的子元素。 (抑制来自这个子树的进一步错误。)

错误:杂散结束标签头。

错误:开始标签正文,但同一types的元素已经打开。

致命错误:最后一个错误后无法恢复。 任何进一步的错误将被忽略。

https://validator.w3.org/#validate_by_uri

在IE F12开发者工具控制台中的消息stream:

HTML1527:DOCTYPE预期。 考虑添加一个有效的HTML5文档types:“<!DOCTYPE html>”。

HTML1502:意外的DOCTYPE。 只有一个DOCTYPE是允许的,它必须在任何元素之前发生。

HTML1513:find了额外的“<html>”标记。 每个文档只能有一个“<html>”标签。

HTML1503:意外的开始标记。 HTML1512:无与伦比的结束标记。

一开始就由一个BOM引起的一切。 debugging器在第一行显示一个黑色的菱形。

文件保存与签名,但不是由PHP组装不会导致这样的错误和黑色的钻石在IEdebugging器不是vissible。 所以也许php以某种方式转换BOM。 看来,主要的PHP文件必须保存与签名才能看到这一点。

这些奇怪的字符出现在与include_once()合并的文件的开始和/或边界上,并且在没有签名之前保存文件时不可见。 这就是为什么它指向BOM参与。

我已经注意到这一切,前天开始转换我的网站到HTML5和validation。

BOM也可以在行首创build一个小缩进。 两个文件包含相同的文本,但有一个缩进。