为什么“”被注入我的HTML?

前端之家收集整理的这篇文章主要介绍了为什么“”被注入我的HTML?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:您可以看到问题 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>
    "&#8203;


        "
    <title>Test Harness</title>
    <link href='/css/main.css' rel='stylesheet' type='text/css' />
    <h3>Test Harness</h3>
</body>
</html>

看起来&#802是一个零宽度的空间,但究竟是什么造成的呢?我使用带有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元素开头的数据,您也不会注意到视觉呈现中的任何内容。符号&#8203;是它的字符引用,可能是浏览器工具用来指示通常不可见字符的存在。

生成HTML文档的软件可能会插入ZERO WIDTH NO-BREAK SPACE(U FEFF)。这本来是有效的,因为通过特殊约定,UTF-8编码数据可以从该字符开始,也称为字节顺序标记(BOM),当出现在数据的开头时。使用U 200B而不是U FEFF听起来像是软件不太可能发生的错误,但如果他们想到角色的Unicode名称,那么人类可能会错误

猜你在找的HTML相关文章