BOM 有时位于文本内部,而不是在开头 - 如果某个文件已经由 php 使用例如 include_once() 从其他文件组装了一段时间。要删除它,请删除 BOM 之前至少一个字符和 BOM 之后至少一个字符之间的区域(以防万一)。 BOM 的位置可以位于 Internet Explorer 的 F12 Developer Tools 中,也可能位于 Edge 中。它被可视化为黑色菱形/菱形。
Visual Studio 和 WebMatrix 可以保存带或不带签名的文件(在开头)。
BOM 在验证期间 (https://validator.w3.org/#validate_by_upload) 或在控制台中导致错误 - 可以被视为没有
的孤立元素,当显然存在时!:
错误:错误的结束标记头。
作为第二个 ,当只有一个 存在且一切正确时:
错误:已看到开始标记主体,但已存在相同类型的元素
打开。
当BOM或两个BOMS占据第一行且DOCTYPE在第二行时,可以看到整个文档缺少DOCTYPE,并显示类似于此的消息:
错误:在没有先看到文档类型的情况下发现非空格字符。
预期例如.
错误:元素头部缺少子元素的必需实例
标题。
错误:错误的文档类型。
错误:杂散的开始标记 html。
错误:杂散的开始标记头。
错误:此时元素元上不允许使用属性名称。
错误:元素元缺少以下一项或多项
属性:itemprop、property。
错误:此时元素元上不允许使用 http-equiv 属性。
错误:元素元缺少以下一项或多项
属性:itemprop、property。
错误:此时元素元上不允许使用属性名称。
错误:元素元缺少以下一项或多项
属性:itemprop、property。
错误:元素链接缺少必需的属性属性。
错误:此时元素元上不允许使用属性名称。
错误:元素元缺少以下一项或多项
属性:itemprop、property。
错误:此时元素元上不允许使用属性名称。
错误:元素元缺少以下一项或多项
属性:itemprop、property。
错误:此时元素元上不允许使用属性名称。
错误:元素元缺少以下一项或多项
属性:itemprop、property。
错误:元素标题不允许作为元素主体的子元素
语境。 (抑制来自该子树的更多错误。)
错误:元素样式不允许作为元素主体的子元素
语境。 (抑制来自该子树的更多错误。)
错误:错误的结束标记头。
错误:已看到开始标记主体,但已存在相同类型的元素
打开。
致命错误:在最后一个错误后无法恢复。任何进一步的错误将
被忽略。
(https://validator.w3.org/#validate_by_uri)
以及 IE F12 开发者工具控制台中的消息流:
HTML1527:应为 DOCTYPE。考虑添加一个有效的 HTML5 文档类型:“”。
HTML1502:意外的 DOCTYPE。只允许一个 DOCTYPE 并且它必须出现在任何元素之前。
HTML1513:发现额外的“”标签。每个文档只能存在一个“”标签。
HTML1503:意外的开始标记。 HTML1512:结束标记不匹配。
一开始就由一个 BOM 引起的一切。调试器在第一行显示一个黑色菱形。
使用签名保存但未由 php 组装的文件不会导致此类错误,并且黑色菱形在 IE 调试器中不可见。所以也许 php 会以某种方式转换 BOM。似乎必须将主 php 文件与签名一起保存才能看到。
这些奇怪的字符出现在与 include_once() 合并的文件的开头和/或边界上,并且在之前没有签名保存文件时不可见。这就是它指向 BOM 参与的原因。
我在前天开始将我的网站转换为 HTML5 并进行验证时注意到了这一点。
BOM 还可以在行首创建一个小缩进。两个文件包含相同的文本,但一个带有缩进。