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)。有什么想法吗?
提前致谢。
解决方法
验证器和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名称,那么人类可能会错误。
原文地址:https://www.jb51.cc/html/232432.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。