我似乎无法摆脱 header.php 上的验证错误(例如 "Stray start tag html")

Validation errors (like "Stray start tag html") that I can't seem to shake on header.php

运行 验证并出现一些错误。

    f<!DOCTYPE html>↩
    <!--[if IE 8 ]><html class="ie ie8 no-js" lang="en-US" prefix="og: http://ogp.me/ns#"> <![endif]-->↩
    <!--[if (gte IE 9)|!(IE)]><!--><html class="no-js" lang="en-US" prefix="og: http://ogp.me/ns#"> <!--<![endif]-->↩
    <head>↩

我尝试将 header.php 保存为(UTF-8,无 BOM),但我似乎无法摆脱非 space 字符('f' ) 在开始时。

这是PHP代码:

<!DOCTYPE html>
<?php
/**
 * Theme Header
 *
 * Outputs <head> and header content (logo, tagline, navigation)
 */
?>
<!--[if IE 8 ]><html class="ie ie8 no-js" <?php language_attributes(); ?>> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html class="no-js" <?php language_attributes(); ?>> <!--<![endif]-->
<head>

然后,我不知道从哪里开始处理 "stray html" 错误标记。自己检查一下http://wsumc.com/worship

正在查看 https://validator.w3.org/nu/?doc=http://wsumc.com/worship/

“杂散开始标记 html 消息只是开头 f 的另一个副作用。

HTML 的工作方式是,f 是裸文本——head 元素不能包含——所以它意味着 body文档已经开始,后面的所有内容都是 body 的一部分。因此,当 HTML 解析器看到 f 时,解析器会生成一个 <body> 开始标记。

但是解析器接下来看到的是 <!DOCTYPE html>——现在在 body 中——所以解析器说,“Stray doctype” 并且继续前进。但是接下来解析器找到的是一个 <html> 开始标记,它现在也在 body 中——所以解析器说,“杂散的开始标记 html.

Parsing HTML documents section of the HTML spec 定义了所有这些是如何工作的(尽管对于大多数读者来说,这并不是 super-approachable 的方式……)