编辑:您可以看到问题 here (查看源代码)。
EDIT2:有趣的是,它不是源代码中的问题。仅适用于控制台(还有 Firebug)。
我在名为 test.html
的文件中有以下标记:
<!DOCTYPE html>
<html>
<head>
<title>Test Harness</title>
<link href='/css/main.css' rel='stylesheet' type='text/css' />
</head>
<body>
<h3>Test Harness</h3>
</body>
</html>
但在 Chrome 中,我看到:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
"​
"
<title>Test Harness</title>
<link href='/css/main.css' rel='stylesheet' type='text/css' />
<h3>Test Harness</h3>
</body>
</html>
看起来像̢是一个零宽度的空间,但是是什么原因造成的呢?我正在使用带有 UTF-8 编码的 Sublime Text 2 和带有 Jinja2 的 Google App Engine(但 Jinja 只是加载 test.html
)。有什么想法吗?
提前致谢。
最佳答案
这是源代码中的一个问题。 live example您提供的内容以以下字节开头(即,它们出现在 <!DOCTYPE html>
之前):0xE2 0x80 0x8B。这可以看出,例如使用 Rex Swain 的 HTTP Viewer通过在“显示格式”下选择“十六进制”。另请注意 validating带有 W3C 标记验证器的页面提供的信息表明文档的开头存在严重错误,尤其是消息“第 1 行,第 1 列:在未先查看文档类型的情况下找到非空格字符。”
在验证器和 Chrome 工具中发生了什么——以及例如在 Firebug 中 – 字节 0xE2 0x80 0x8B 被视为字符数据,这隐式启动了 body
元素(因为字符数据不能有效地出现在 head
元素中或其之前),意味着一个空的 head
它之前的元素。
当然,解决方案是删除那些字节。浏览器通常会忽略它们,但您不应依赖此类错误处理,并且这些字节会阻止有用的 HTML 验证。如何删除它们,以及它们最初是如何到达那里的,取决于您的创作环境。
由于页面被声明(在 HTTP header 中)为 UTF-8 编码,这些字节代表 ZERO WIDTH SPACE (U+200B) 字符。它没有可见的字形,也没有宽度,因此即使浏览器将其视为 body
开头的数据,您也不会在视觉呈现中注意到任何内容。元素。符号 ​
是它的字符引用,大概被浏览器工具用来指示通常不可见字符的存在。
生成 HTML 文档的软件可能是为了插入 ZERO WIDTH NO-BREAK SPACE (U+FEFF) 代替。那将是有效的,因为根据特殊约定,UTF-8 编码数据可能以此字符开头,当出现在数据开头时,也称为字节顺序标记 ( BOM )。使用 U+200B 而不是 U+FEFF 听起来像是软件不太可能犯的错误,但如果人类想到字符的 Unicode 名称,他们可能会这样误会。
关于html - 为什么 "​"被注入(inject)到我的 HTML 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18478847/