如何解决“在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的字节顺序是固定的。
以下是我如何解决这个问题:
-
下载并安装Notepad ++
-
用记事本++打开文件
-
在菜单中select“Encoding”并将其设置为“不带BOM的UTF-8编码”
-
保存文件,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一个小缩进。 两个文件包含相同的文本,但有一个缩进。