编辑:您可以看到问题
here(查看源代码)。
EDIT2:有趣的是,它不是源代码中的问题。仅限控制台(Firebug)。
<!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。这可以看作例如在“显示格式”下选择“Hex”,使用Rex Swain的
HTTP Viewer。另请注意,
validating带有W3C标记验证器的页面提供的信息表明文档开头有一些非常错误,特别是消息“第1行,第1列:未找到doctype的非空格字符”。
验证器和Chrome工具中会发生什么 – 以及在Firebug中 – 字节0xE2 0x80 0x8B被视为字符数据,它隐含地启动了body元素(因为字符数据无法有效地出现在head元素中或之前),这意味着它前面有一个空头元素。
当然,解决方案是删除这些字节。浏览器通常会忽略它们,但您不应该依赖此类错误处理,并且字节会阻止有用的HTML验证。如何删除它们以及它们如何到达那里取决于您的创作环境。
由于页面(在HTTP标头中)被声明为UTF-8编码,因此这些字节代表ZERO WIDTH SPACE(U 200B)字符。它没有可见的字形,也没有宽度,因此即使浏览器将其视为body元素开头的数据,您也不会注意到视觉呈现中的任何内容。符号​是它的字符引用,可能是浏览器工具用来指示通常不可见字符的存在。
生成HTML文档的软件可能会插入ZERO WIDTH NO-BREAK SPACE(U FEFF)。这本来是有效的,因为通过特殊约定,UTF-8编码数据可以从该字符开始,也称为字节顺序标记(BOM),当出现在数据的开头时。使用U 200B而不是U FEFF听起来像是软件不太可能发生的错误,但如果他们想到角色的Unicode名称,那么人类可能会错误。