【问题标题】:Head tag in html page closes programatically after page loadhtml页面中的head标签在页面加载后以编程方式关闭
【发布时间】:2014-04-08 21:59:49
【问题描述】:

我的页面位于here 如您所见,它看起来工作不正常。如果您尝试在旧版浏览器中打开它,这一点会变得非常明显(这是最初让我感到厌烦的原因)。

我检查了来自 chrome 的解释源代码,它显示了以下内容:

<html>
    <head>
        <style type="text/css"></style>
    </head>
    <body>
            <title>Internet adgang - Hurtig opsætning - Ansatte</title>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">

等等。

似乎有什么东西正在关闭我的 head 标签,导致所有错误:

W3 validator

我完全不知道是什么原因造成的。

你可以看我的源代码here(我已经打乱了PHP):

上面的代码不包含我的正文代码,因为我很确定这与头部标签突然关闭无关。

Here 是可以正常工作的页面的一些来源:

我对此完全感到困惑,我不知道该怎么做,也不知道是什么原因造成的。 有什么想法吗?

解决方案

在 Buttc4k3 和 vogomatix 的帮助下,我终于找到了解决方案。正如 buttc4k3 所说,文件中隐藏了一个非法的“零宽度无空格”字符,该字符未在我的 sublime 文本编辑器中显示。仅当您在 Notepad++ 中打开文件时才会显示。我不明白为什么这个字符会出现在谷歌浏览器中,而不是我的源代码中,但是在谷歌搜索之后,我发现保存在 UTF-8 WITH BOM(字节顺序标记)中的文件会将 BOM 保存为零宽度无空格字符!这是 vogomatix 救了我的地方,并告诉我我的文件是用 BOM 保存的,在没有 BOM 的情况下重新编码后它工作正常。

所以 - 如果你和我有同样的问题 - 保存你的文件而不使用 BOM 编码(这可以在 notepad++ 中完成)。

【问题讨论】:

  • 始终将 php 代码放在 head 标签的上方或下方。尝试解决它。​​
  • 看起来您有答案,但您很困惑为什么会以这种方式工作。如上所示,我希望您了解代码正常工作的原因pastebin.com/j6FZYPM8
  • 非常挑剔但 img 标签在 HTML(5) 中不会关闭,因此它们应该是 而不是

标签: javascript php html css head


【解决方案1】:

我获取了您网站的页面源并将其粘贴到Notepad++ 并在第 3 行第 5 列中找到了zero-width no-break space。它在大多数编辑器/查看器中呈现为不可见,但它破坏了浏览器的 HTML 解析器。我不知道它是如何或为什么到达那里的,因为我在 PHP 代码中找不到它,但也许你可以通过在 Notepad++ 中打开代码来找到它。它将这个字符渲染为一个小点。如果找不到,请删除从&lt;head&gt;&lt;title&gt; 的所有内容并重新输入。

我希望这行得通。

PS:即使这不是您的页面损坏的原因,您也应该在标记中添加&lt;html&gt;&lt;/html&gt;。大多数浏览器都可以处理它的缺失,但它的存在是有原因的。

【讨论】:

  • 谢谢,这也是 Flixer 在下面的回答,它似乎解决了这个问题。去掉 ZW NB,将 PHP 移到页面顶部并添加 标签终于解决了我的问题。
  • 重新打开问题!虽然我已经让页面正常工作,但我现在在类似页面上遇到了同样的问题:wifi.au.dk/testingenv/auto_setup_student.php 我已经删除了从第一个符号到
    的所有内容,并从工作中复制了源代码页面到这个页面,它仍然不起作用。我很困惑。
  • @BjørnZeiler 这是在不同位置的同一个角色。这一次,它在 doctype 之前。
  • 这里是未经编辑的来源:pastebin.com/H56a8PNN 你能找到我的角色吗?我根本看不到它。
  • 顺便说一下,W3C 验证器还获取了声称是 UTF-8 文件的 BOM(字节顺序标记)。验证器特别提到旧版浏览器可能对此有问题
【解决方案2】:

您似乎缺少&lt;html&gt; 标签。

当前 HTML 代码:

<!DOCTYPE html>
<head>
    <title>Internet adgang - Hurtig opsætning - Ansatte</title>

一定是这样的:

<!DOCTYPE html>
<html>
    <head>
        <title>Internet adgang - Hurtig opsætning - Ansatte</title>
        [...]
    </head>
    <body>
        [...]
    </body>
</html>

【讨论】:

  • 我已经尝试过了,没有骰子。
  • &lt;html&gt;&lt;head&gt; 之间似乎还有一些奇怪的字符 - 如果我对其进行十六进制编码,它会返回:&amp;#xa;&amp;#x20;&amp;#x20;&amp;#x20;&amp;#x20;&amp;#xfeff;,显然是 &amp;#xfeff 导致了问题(研究:似乎表示“零宽度无间断空间”)。尝试删除 和 之间的所有字符,并仅用空格和换行符替换它们。
【解决方案3】:

将网站的第一部分编辑如下:

    <?php
   include 'XXXXX';
   include 'XXXXX';
   if(!isset($_GET['lang'])) {
       $lang = "DA";
   } else {
       $lang = $_GET['lang'];
   }
   ?>
<!DOCTYPE html>
<html lang="<?php $lang; ?>">
<head>
    <title><?php echo trans("Internet adgang - Hurtig opsætning - Ansatte", $lang); ?></title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <link rel="stylesheet" href="resources/styles/style.css" media="all">
    <script src="resources/js/jquery.min.js" type="text/javascript"></script>
    <script src="resources/js/jquery-ui.min.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="resources/styles/au-flowbox-style.css">
    <script type="text/javascript" src="resources/js/au-flowbox.js"></script>
    <script type="text/javascript" src="resources/js/au-flowbox.data.js"></script>
</head>
<body>
....

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签